PV3Dでウォークスルーの最近のブログ記事

以前のエントリの視線とメッシュの交差判定を使って
凸凹の地形を歩かせてみました。

walkthrough1.jpg
  • 矢印キーで移動
  • 右上のマップをクリックすると地形変形
前回のエントリー
「DisplayObject3D.world」でモデルのワールド空間での
移動・回転・スケールの変換行列が取得できる

と書いたんですが、どうやらworldプロパティは
シーンがレンダリングされるタイミングで初めて値が更新されるみたいです。

てことは、モデルを回転してからworldプロパティにアクセスしても
レンダリング直前では回転を適用する前の情報しか取れない事になる・・・
逆にレンダリングしてからアクセスしてしまうと、
例えば常に回転しているモデル上をキャラが歩く場合、
モデル回転→レンダリング→ワールド座標を取得して交差判定→キャラを動かす
という処理の流れになってしまって
キャラクターの描画が遅れる事になってしまう。。
かといって正確なworldプロパティを取得する為だけに
2回レンダリングするのも無駄すぎる・・・

色々調べて、どーしてもいい方法が見つからなかったので
worldプロパティを使わずにワールド空間での変形情報(Matrix3D)を調べる事にしました。
Papervision3Dでウォークスルーをさせようと思ってます。
キャラクターが水平な地面を動くだけなら壁の判定だけすればいいんですが
凹凸のある地形に沿って動かしたいので
足元のポリゴンの高さを調べる必要があります。
checkheight.png

Shockwave3DにはmodelsUnderRayっていう
レーザーを飛ばしてポリゴンに当たった座標が調べられる機能があったんで
Papervision3Dにもあるかなーって調べたけど見つかりませんでした。。
見つけられなかっただけで本当はあるのかもしれないけど、
諦めてmodelsUnderRay的な機能を作る事にしました。
やってることは、対象のメッシュモデルの全三角ポリゴンに対して、
視線と三角形が交差しているかひたすらチェックしていって、
交差しているものがあったら交差情報を返すという感じです。
1  2