2009年9月アーカイブ

前回のエントリー
「DisplayObject3D.world」でモデルのワールド空間での
移動・回転・スケールの変換行列が取得できる

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

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

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

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

Papervision3D始めるよ

2009年9月 1日
ネット自体もう何年もやってなかったので
昔繋がりがあった人も、とっくにサイトがなくなったりしてて
軽く浦島状態です。みんな生きてるのかな・・・

もうお爺さんになってしまったんですが
今頃になってPapervision3Dを始めたので
わかった事とかメモしていこうかなと思います。
バージョンによってだいぶ作りが違うみたいなんですが、
自分はGoogleCodeのここにある2.1.920を使ってます。

とりあえず始めに、色んなものに流用できるような
3D空間内を自由に歩けるものを作りたいなあ。
昔やってたShockwave3Dの感覚で
表示は1万ポリゴンくらい余裕かなって思ったら余裕で無理でした。。
地形とか、かなり簡略化しないと。
1  2