2024/04/27(土) [n年前の日記]
#1 [python][prog] OpenGLで道路を描画するPythonスクリプトを書いてる。その3
OpenGLを使ってアイソメトリック的な見た目で道路を描画するPythonスクリプトを書いている。
大体出来たような気がするので、github にアップロードしてみた。道路データが記述されたcsvファイルを読み込んで、OpenGL (PyOpenGL + glfw)で描画している。
_mieki256/drawroadiso_py: Drawing roads with isometrics using Python and OpenGL
大体出来たような気がするので、github にアップロードしてみた。道路データが記述されたcsvファイルを読み込んで、OpenGL (PyOpenGL + glfw)で描画している。
_mieki256/drawroadiso_py: Drawing roads with isometrics using Python and OpenGL
◎ 初期化に時間がかかっていた件 :
道路と周辺の三角形が重ならないように、初期化処理時に衝突判定をして対処するようにしてみたところ、処理時間がかかってしまって悩んでいたけれど。別のスクリプトを用意して、描画に必要になる道路データを ―― 道路と三角形が重ならないように処理済みのデータを、あらかじめ事前に作成しておいて、描画するスクリプトは用意済みのデータを読み込んでそのまま描画するだけ、という仕組みにすることでどうにか解決してみた。何もわざわざ、スクリプト実行時に、その都度処理をしなくてもいいよなと…。
ただ、どうしたら衝突判定の回数を少なくできるのか、そのあたりの方法には興味がある。今後の宿題。絶対に何かしらの方法があるはず…。
ただ、どうしたら衝突判定の回数を少なくできるのか、そのあたりの方法には興味がある。今後の宿題。絶対に何かしらの方法があるはず…。
◎ 描画が遅いかもしれない :
メインPC、AMD Ryzen 5 5600X + NVIDIA GeForce GTX 1060 6GB なら、一応60FPSで動いてるように見えているけれど。少し非力な環境で動かしたら処理落ちしそうだなと…。
原因は、毎フレーム、512 + 512枚ほど道路のポリゴン + 三角形ポリゴンを、glBegin() - glEnd() で描いてることかなと…。スクリーン外のポリゴンも描画対象にしてしまって無駄な処理をしているだろうし、glBegin() - glEnd() が遅かったりしそうだし…。ポリゴンをある程度まとめておいて、ディスプレイリストなり、頂点配列なりで描画すれば状況が違ってくるかもしれない…?
ただ、そのためには、全体のエリアを分割して複数の小エリアにして並べないといかんかなと…。それぞれの小エリアが固定された道路のモデルデータを持つようにして、各フレームではどの小エリアを描画するかを決定して、みたいな処理をしないといけない気がする。その場合、事前にPythonスクリプトで、小エリア単位のデータに変換して出力しておく、みたいな感じになるのかなと…。
原因は、毎フレーム、512 + 512枚ほど道路のポリゴン + 三角形ポリゴンを、glBegin() - glEnd() で描いてることかなと…。スクリーン外のポリゴンも描画対象にしてしまって無駄な処理をしているだろうし、glBegin() - glEnd() が遅かったりしそうだし…。ポリゴンをある程度まとめておいて、ディスプレイリストなり、頂点配列なりで描画すれば状況が違ってくるかもしれない…?
ただ、そのためには、全体のエリアを分割して複数の小エリアにして並べないといかんかなと…。それぞれの小エリアが固定された道路のモデルデータを持つようにして、各フレームではどの小エリアを描画するかを決定して、みたいな処理をしないといけない気がする。その場合、事前にPythonスクリプトで、小エリア単位のデータに変換して出力しておく、みたいな感じになるのかなと…。
[ ツッコむ ]
以上です。