2016/04/01(金) [n年前の日記]
#1 [proce55ing][processing] Processingの画角がよく分からなくてハマっていたり
Processingの画角が、よく分からない。
やりたいことは…。ProcessingのP3Dモード(3DCG描画モード)で、ウインドウサイズとピッタリ同じ大きさになるポリゴンを配置したい。そのポリゴンにテクスチャを貼って、2D的な背景描画をしたいわけで。
画角が分かれば、どのぐらいの大きさのポリゴンをどこに配置すればウインドウを覆い隠せるか、求められるはず。
Processingの場合、 _perspective() という命令を使えば、画角、画面比率、近い面までの距離、遠い面までの距離が指定できるらしい。
デフォルトでは、画角は π/3 ラジアン。πラジアン=360度だから、π/3 ラジアンなら、60度のはず。
画角は、 _水平、垂直、対角線 の画角があり得るけど、Processingの場合は垂直方向の画角となってるらしい。
それらを踏まえてポリゴンの大きさを計算して表示してみたのだけど、これがウインドウサイズと一致してくれない…。何が計算間違いをしてるらしい。
やりたいことは…。ProcessingのP3Dモード(3DCG描画モード)で、ウインドウサイズとピッタリ同じ大きさになるポリゴンを配置したい。そのポリゴンにテクスチャを貼って、2D的な背景描画をしたいわけで。
画角が分かれば、どのぐらいの大きさのポリゴンをどこに配置すればウインドウを覆い隠せるか、求められるはず。
Processingの場合、 _perspective() という命令を使えば、画角、画面比率、近い面までの距離、遠い面までの距離が指定できるらしい。
デフォルトでは、画角は π/3 ラジアン。πラジアン=360度だから、π/3 ラジアンなら、60度のはず。
画角は、 _水平、垂直、対角線 の画角があり得るけど、Processingの場合は垂直方向の画角となってるらしい。
それらを踏まえてポリゴンの大きさを計算して表示してみたのだけど、これがウインドウサイズと一致してくれない…。何が計算間違いをしてるらしい。
◎ ちょっと分かってきた。 :
ポリゴンの縦幅の半分を求める際、距離 * sin(fov / 2.0) で計算してたけど、コレが間違ってた。距離 * tan(fov / 2.0) じゃないとおかしい。何故に自分は、そんな間違った計算を…。
また、前述の perspective() の解説ページは、Processing 1.x時代の内容のせいか、スクリーンまでの距離がとんでもなく大きい値になってた。手元で使ってる processing 3.0.2 とは違ってるらしい。 _perspective() \ Language (API) \ Processing 2+ には、視点からスクリーンまでの距離は、float cameraZ = (height/2.0) / tan(fov/2.0); と書いてあるけど、こちらのほうが正しい。
後は、テクスチャのUV座標を求めてスクロールさせれば…。しかし、360度ループするような式ってどう書けば…。水平画角が60度ならループできたけど、本来は 60度 * (width / height) で1画面分スクロール、になるはずだよな…。
また、前述の perspective() の解説ページは、Processing 1.x時代の内容のせいか、スクリーンまでの距離がとんでもなく大きい値になってた。手元で使ってる processing 3.0.2 とは違ってるらしい。 _perspective() \ Language (API) \ Processing 2+ には、視点からスクリーンまでの距離は、float cameraZ = (height/2.0) / tan(fov/2.0); と書いてあるけど、こちらのほうが正しい。
後は、テクスチャのUV座標を求めてスクロールさせれば…。しかし、360度ループするような式ってどう書けば…。水平画角が60度ならループできたけど、本来は 60度 * (width / height) で1画面分スクロール、になるはずだよな…。
[ ツッコむ ]
以上です。