Astro de 3D(12) PerspectiveProjection は放棄<3>
2008/06/16 22:41 - Astro
PerspectiveProjection による透視変換を使った 3D 表現のコーディングに進む前に PerspectiveProjection とはどんなクラスなのか Asrto ASDoc を見て確認します。
冒頭の図に、ViewPoint(視点)、Projected Plane(投影面)、focalLength(焦点距離)、frustum(視錐台)などというワードが見られますが、この図の意味は以下のサイトを見ると理解できます。
PerspectiveProjection には以下の三つのプロパティがありますが、とりあえず透視射影に必要なのは、fieldOfView と focalLength なので、この二つにのみ着目します。
- fieldOfView
- focalLength
- projectionCenter
fieldOfView
これは上記参考サイト1.にある「視野角」です。
ASDoc には、このプロパティに設定できる値は 0~180 の Number で、角度(degree)を指定する、と書いてあります。ラジアンじゃなくて角度ですね。
また、透視射影による歪みが以下のようになるとも書いてあります。
- その値が 0 に近づくほど小さくなる(平行投影になる)
- その値が 180 に近づくほど大きくなる(魚眼レンズ風効果を得る)
focalLength
これは上記参考サイト2.の図2の focus と考えればよいのだと思います。
参考サイト2.の図3、4を参照するに、以下のようになるんだと思われます。
- この値の絶対値が大きいほど視点が 3D オブジェクトから離れるので透視による歪みが小さくなる
- この値の絶対値が小さいほど視点が 3D オブジェクトに近づくので透視による歪みが大きくなる
ところでこのプロパティは read-only です。ユーザが自由に値を設定できません。 他にプロパティがないんだから、fieldOfView の値が focalLength を決定に大きく関与すると考えるべきでしょう。
おっと、ASDoc をよく読んだら fieldOfView とステージのアスペクト比(幅を高さで割ったもの)から計算される、と書いてありました。
となると、fieldOfView と focalLength の関係は以下のようになると予想されます。
- fieldOfView の値が 0 に近づくほど focalLength の値はその絶対値が大きくなる、そして、透視による歪みが小さくなる
- fieldOfView の値が 180 に近づくほど focalLength の値はその絶対値が小さくなる、そして、透視による歪みが大きくなる
ですが、試してみたところそういう風になりません。
ではどうなったのか、ということはサンプルと共に次回。