10 月 04 2008

PV3Dでレースゲーム制作 18 - PV3D 2.0 Beta 1へ移行

Posted by tanjo at 7:36 PM

先日(…といっても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 は FrustumCuller クラス、useProjection は Matrix3D クラスを使っているようですが。。ベンチマークしてみても負荷の違いはほとんどありませんでした。
しかも、私の環境だと 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

Leave a Reply