note.x

[Papervision3D2.0] Camera

あまりに忙しすぎてblog更新サボってたら随分間が開いちゃったけど、引き続きPV3D2.0を勉強中。今回はカメラ。

PV3D2.0には、

  • Camera3D
  • FreeCamera3D
  • FrustumCamera3D

と、3種類のカメラがある。
※リビジョン639以降Camera3Dに一本化されました。FrustumCamera3Dの特性はCamera3Dが引き継いでいます。

Camera3DとFreeCamera3Dについては、これまでと変わりない(Camera3Dを原点に置くとマズいのも相変わらず)みたいなので、新規追加されたFrustumCamera3Dを使ってみた。ASColladaの作者でもあるTim Knip氏によるもので、以前はブランチで開発されてたものが2.0でめでたくマージされた。

標準のカメラとの決定的な違いは、nearClippingとfarClippingが実装されている点。カメラからの距離に応じて自動的にポリゴンの表示・非表示を処理してくれる。これで、特にテクニックを駆使しなくてもバカでかい地形の上を歩き回るようなものが比較的簡単に作れるようになったかも。

FrustumCamera3Dのコンストラクタ定義

FrustumCamera3D(
    viewport3D:Viewport3D,
    fov:Number = 90,
    near:Number = 10,
    far:Number = 2000
)
  • viewport3D:ViewPort3Dオブジェクトの指定
  • fov:カメラの視角
  • near:手前側のクリッピング平面位置
  • far:奥側のクリッピング平面位置

以下わりといい加減なサンプル。

e_frustumcamera.jpg

FrustumCameraTest.swf(要:FlashPlayer9)※ちょっと読み込みに時間かかります。
カーソルキーでカメラが移動

地形データは、206の時と同じくTORCSのデータを拝借。テクスチャを手抜きしたので、スゲー判りづらいサンプルになっちゃったけど、下記のようなオーバルのサーキット上を移動できるようになってる。

e_oval.jpg

衝突判定はよくわかんないので、バリバリにメリ込むヒドいサンプルだけど、とりあえずfarClippingが効いてるおかげで△5700の地形上をなんとか動き回れるだけで妙にウレシイ。


Trackback URL : http://blog.r3c7.net/as3-software-rendering/133/trackback/

COMMENTS

  1. てんごく - 2007.12.28 17:33:57

    シザリング出来れば完璧っすね!

  2. Exey - 2007.12.30 20:25:42

    Cool example! What about sources?

  3. rect - 2008.01.04 17:08:16

    >てんごくさん

    シザリングって、てんごくさんのコメントで初めて知ったんですけど、なるほどスッゲー納得しました。
    ポリゴンがクリップ面を跨いじゃうときに、カリングしてほしく無いのにカリングされちゃうのはなんでだろと疑問だったんです。理由がわかったんでPV3Dで出来る範囲で解決する方法を模索してみることにします。
    メチャメチャ勉強になりました。感謝です!

  4. former - 2008.01.07 22:43:13

    すいません、FrustumCamera3Dはrotation関係のプロパティが壊れているようですが、方向転換はpanで実現したのでしょうか?

  5. rect - 2008.01.07 22:54:43

    > formerさん

    こんにちは。そうです、camera.yaw() で回してます。

  6. former - 2008.01.09 17:13:00

    どうもありがとうございました。
    今一人称視点のゲーム作っていまして、必要に駆られて自力でシザリング行ってるんですが、書いたコードがやたら重くてグンニョリです。誰かエラい人に組んでほしいですOTL

Leave a Reply