Papervision3D2.0: 2008年4月アーカイブ

今回は、MouseEventについて

1.描画領域全体に対するマウスイベント
2.3Dオブジェクトに対するマウスイベント
の2つを考える。

特に後者はPapervison3Dの1.5から仕様変更があったので、そこのポイントを押さえる。

実際にやってみるのは、
1.画面上でマウスをドラッグするとCubeを回転
2.マウスオーバーすると拡大、マウスアウトすると元に戻す









ソース(myMouseEvent.mxml




1.画面をドラッグするとCubeを回転
・イベント自体はPapervision3D特有のものでもなんでもなく、フツーのFlexのイベント
なので、thisにaddEventListenerするだけでマウスイベント自体は取れる



・イベントの内容は自体は、マウスが押されているかどうかを保持するisMouseDown:Booleanと、ドラッグした距離に比例して素早く回転させたいのでドラッグの始点となる座標を保持だけ


・実際の回転は、36行目でaddEventListerされたENTER_FLRAMEつまり毎フレーム呼ばれる関数内に書けばいい



2.マウスオーバー ・これはPapervision3dのEventで、1.5ではSceneはInteractiveScene3Dを使わなければならなかったり、MovieScene3Dでオブジェクトをその直下に配置しなければならないなどメンドクサイことがいっぱいあったけど、GreateWhiteではScene系のクラスはScene3Dのみになっている。
なので、マウスという2次元の座標に対し、3D次元空間にあるObjectのEventの為に計算を頑張るかは、それぞれのinteractiveというプロパティがtrueになっているかによって決まる。
まず、ViewPort3Dのインスタンスのinteractiveプロパティをtrueにする。コンストラクタでいうと4番目の引数がそれであるので、trueにする。



・次にCubeのオブジェクトにイベントを付けたいので、こいつのMaterialのinteractiveプロパティもtrueにしとく。(何でもかんでもtrueにすると重くなるので、使うやつだけにする)


・最後にaddEventListerして終わり。



以上メモ終わり

1.5から仕様変更が起こったので、基本的なPrimitiveObjectを表示するだけのソースを作成。


ポイントをメモ。







ソース(PrimitiveObject.mxml




svnソースは、http://papervision3d.googlecode.com/svn/trunk/のbranches/GreatWhite/src/にあるので、ビルドパスに追加



・Viewport3Dには、描画を計算するサイズを指定。mx:applicationと同じにしとけばとりあえず無駄は無い


・カメラはFreeCameraを使うと、カメラを移動させたり回転させたりできる。


・オブジェクトはSceneに直接addChildせずに、rootNodeを作って用途ごとに階層化すれば、rootNodeごと移動とか回転とかできる。


・BitmapFileMaterialで画像のマテリアルを作れる。doubleSidedで裏から見ても描画される


・カメラはFreeCameraを使うと、カメラを移動させたり回転させたりできる。


・Cubeは6面持っているので、MaterialListに1つずつ貼る。別にBitmapFIleMaterial以外のMaterialを使ってもいい。frontや、backとか以外にもallがある。


・ColorMaterialも使ってみた。他にもMovieMaterialやWireframeMaterialなどがある。 Interractive~MaterialやPrecise~Materialは、廃止され、propertyでtrueすればいい


・eventLisnerに追加してあるので、毎フレーム自動的よばれて描画してくれる。 とりあえず、回転を3種類の方法でやってみた。



以上メモ終わり

iKnow

あわせて読みたいブログパーツ
Firefox meter