10 月 04 2008
PV3Dでレースゲーム制作 18 - PV3D 2.0 Beta 1へ移行
先日(…といっても1ヶ月以上前ですが)、Google Codeのダウンロードページにて「Papervision3D 2.0 Beta 1」のソースコードが配布開始されました。マイナーリビジョンよりは正式公開版使った方が情報共有しやすいかな、と思い rev.585 から移行します。
http://papervision3d.googlecode.com/svn/trunk/
カメラの仕様変更
シェーダはじめPV3Dの大半の機能は「使ってません」ので、移植でつまずいたのはカメラまわりくらいでした。2.0α GreatWhite(前期)から 2.0β1 のカメラ仕様変更点とかを私なりにまとめておきます。
» 以前のカメラについてはこちらのエントリ
まず大きな変更は、Camera3D, FreeCamera3D, FrustumCamera3D の3つが統合されて(新)Camera3D になったこと。
基本的には以前の FrustumCamera3D をベースにしたような感じでしょうか。コンストラクタは以下。
Camera3D( fov:Number = 60, near:Number = 10, far:Number = 5000, useCulling:Boolean = false, useProjection:Boolean = false );
- fov(Field of View)は視野角。デフォルトは60度。
- near, far はクリッピング平面までの距離。ただし useCulling か useProjection を設定しないと描画には反映はされません。
- near は focus と同期を取るような仕様になっています。near を変更すると投影が変わってしまうので要注意です。
useCulling, useProjection はどちらも投影空間(視錐台)の外を間引く効果があるっぽいけど、まだ具体的な処理は確認していません。どう使い分けるのやら。
しかも、私の環境だと useCulling が機能しないことがあったので、とりあえず useCulling = false, useProjection = true で作業しています。
そんでもって、移植にあたって気づいた点とか。
- 以前の FrustumCamera3D にあった Rotation系プロパティが代入しても反映されないバグは解消されています。
- 一方、コンストラクタで fov が受け渡せないバグがあるようなので、Camera3D.as(org.papervision3d.cameras.Camera3D)のソース、コンストラクタ部分に以下のような行を追加しておきました。(参考:note.x | [PV3D2.0] Updated to beta 1)
this.fov = fov;
- near が focus のエイリアスになってしまった…ということは、レンダリング分けの回で使った「遠くの方だけ描画する」という妙なテクが使えなくなってしまいました。
しかたなく near と focus を切り分けたクラスを作って対処しています。
即席ソース » FrustumCamera3D.as