GrateWhiteのcamerasパッケージ
- 2008 年 6月 28 日
camerasパッケージから手を付けてみます。
このパッケージのクラスは3D空間を写すカメラになる。
よく考えてみれば2Dのグラフィックアプリケーションにはまず無いカメラという要素ですが、3Dソフトには必ずって位ある要素で3Dに配置したオブジェクトを見る視点になります。
まさに現実世界でいうところのカメラと同じ。カメラを覗いてオブジェクトを写していると考えましょう。
GrateWhiteのcameraパッケージに用意されているクラスはCamera3D、FreeCamera3D、FrustumCamera3Dの3つ。
Camera3D、FreeCamera3Dは以前からありました。
とりあえず、Camera3Dを試す。
プロパティを全部表示していますが、びっくりする位数があります。
これにはDisplayObject3Dってクラスから継承しているものが多くて、DisplayObject3Dはカメラ以外にも色々なクラスに使われていて、位置や角度など基本的な機能を支えている模様。全部が全部カメラで重要なプロパティでは無いと思う。alphaとか変更しても変化無かったし。
上のサンプルでは、使いそうなものをピックアップして変更できるようにしてみた。
Camera3Dの場合、3Dに配置されたオブジェクトを指定すると、そのオブジェクトを常に見ている状態になる。targetを変更するとその色のオブジェクトに視線が変わります。
他のプロパティで気づいたところは、rotation関連は直接値を変更しても反映されないみたい。常に指定したオブジェクトを見ているのだから当たり前かな。
x,y,zはカメラの位置。四角形はz=0に配置しているので、カメラのzを0にしてzoomを1にすると等倍で表示される。
zoomとfocusは弄ってみた方が解りやすいと思う。zoomは言葉の通り現実世界のズームレンズの設定だと思ってよさそう。倍率が変わる感じで。
focusは視野角度って表現でいいのかな。小さい程広い範囲が移ります。
scaleはカメラから使うのを想定したものなのかよく解らないけれど、いずれかの値だけ変更するとその方向だけ伸びたり縮んだりする。
メソッドのhoverは、数値に対して視点が変わる。
これはマウス座標を渡して視点を変更するのに用意されたものっぽいけど、実際に使う時はプロパティを直接変更すると思います。
hover ( type:Number, mouseX:Number, mouseY:Number) : void
typeはmouseX、mouseYに対する視点の変化の仕方で0か1を渡します。
0か1かで動き方が異なっています。
Camera3Dはzの値を0より大きくすると、四角形の裏側に視点は移動するのだけれど裏側から指定したオブジェクトに視線を合わせるので、空間を自由に移動しつつカメラは進行方向を向いたままみたいなことが出来ない。そんな時はFreeCameraを使うのです。
FreeCameraにすると以下の感じ。
zを0より大きくすると、四角形は表示されなくなる。rotationも設定できるのでカメラを上に向けたり、横に向けたりも表現できます。そんな訳だからこっちはtargetが無い。あとhoverメソッドも無いです。
最後にFrustumCamera3Dなんだけれど…..。
カメラが向いている方向は常に正面でrotationやzoomの変更は出来ないみたい。
視野角度はfovで設定するのかな。nearはカメラからこの距離を超えて近づいたらオブジェクトを非表示にして、farはカメラからこの距離を超えて離れたらオブジェクトを非表示にするようです。
うーん、早速3Dを良く解っていないところが出て来た感じだなぁ。
イマイチ釈然としないところもあるのですがカメラはこれで良しとして次に行こう。