2024/04/26(金) [n年前の日記]
#1 [python][prog] OpenGLで道路を描画するPythonスクリプトを書いてる。その2
OpenGLを使ってアイソメトリック的な見た目で道路を描画するPythonスクリプトを書いている。
道路は描画できたので、その周辺に、木だか山だかを感じさせる緑色の三角形をランダムに散りばめたいと思ったのだけど、1000枚ぐらい乱数で配置して描画してみたら処理落ちしてしまった…。描画枚数を減らさないと厳しい…。
考えてみたら、道路から遠く離れた場所に配置してしまって無駄になってる場合もありそうだなと気づいた。とりあえず、道路のセグメントデータに対応する形で、道路の脇に配置するようにしつつ、そのフレームで描画してる道路のセグメント数と同じ数だけ三角形を描画するようにしてみたところ処理落ちしない状態になった。
それはさておき。三角形が道路と重なる位置に配置されてしまう時があって、どう解決したらいいものかと…。
ひとまず、道路のセグメントの中心位置と道路幅、三角形の中心位置と三角形の大きさで、2つの円があるものとして衝突判定をして、ぶつかってる三角形は無効にするようにしてみた。
![hitcheck_ss.png](img/_2024/20240426_drawroadiso/hitcheck_ss.png)
これである程度、道路と重なった三角形を排除できたけど、スクリプト実行開始時の初期化処理、衝突判定をするところで、何秒もかかってしまう。三角形を一つ配置するたびに、道路とぶつかってないか、道路のセグメントデータと総当たりで衝突判定してるけど…。セグメントデータが4000以上あるので、配置する三角形の数 x 4000回以上の衝突判定になってしまう。そんなことをしていたら時間がかかってしまうのは当たり前。何かいい手を考えないと…。
道路は描画できたので、その周辺に、木だか山だかを感じさせる緑色の三角形をランダムに散りばめたいと思ったのだけど、1000枚ぐらい乱数で配置して描画してみたら処理落ちしてしまった…。描画枚数を減らさないと厳しい…。
考えてみたら、道路から遠く離れた場所に配置してしまって無駄になってる場合もありそうだなと気づいた。とりあえず、道路のセグメントデータに対応する形で、道路の脇に配置するようにしつつ、そのフレームで描画してる道路のセグメント数と同じ数だけ三角形を描画するようにしてみたところ処理落ちしない状態になった。
それはさておき。三角形が道路と重なる位置に配置されてしまう時があって、どう解決したらいいものかと…。
ひとまず、道路のセグメントの中心位置と道路幅、三角形の中心位置と三角形の大きさで、2つの円があるものとして衝突判定をして、ぶつかってる三角形は無効にするようにしてみた。
![hitcheck_ss.png](img/_2024/20240426_drawroadiso/hitcheck_ss.png)
これである程度、道路と重なった三角形を排除できたけど、スクリプト実行開始時の初期化処理、衝突判定をするところで、何秒もかかってしまう。三角形を一つ配置するたびに、道路とぶつかってないか、道路のセグメントデータと総当たりで衝突判定してるけど…。セグメントデータが4000以上あるので、配置する三角形の数 x 4000回以上の衝突判定になってしまう。そんなことをしていたら時間がかかってしまうのは当たり前。何かいい手を考えないと…。
[ ツッコむ ]
以上、1 日分です。