Papervision3D でマウスイベント
2007/05/30 21:21 - Papervision3D
今回は 3D オブジェクトにマウスイベントを付加する話です。
何を今さら、な空気が漂いまくりの今日のネタ。
なにしろ、配布元によるサンプルの PaperCloud はまさにソレがテーマですし、有益な日本語文献も既に存在しています。
- [papervision3d]*Step1*マウスイベント等を付けたりしてみる。( F-site )
- DisplayObject3DにMouseEventがよくわからん( Unknown Quality )
そんなわけでこの件については上記の二つの記事を読めば、もうそれで必要充分なのですが、とりあえず備忘録的な意味合いでエントリーすることにします。
3D オブジェクトにマウスイベントを付加する際に留意すべきは次の二点。
- scene は Scene3D ではなく MovieScene3D を使う
- 対象 3D オブジェクトは MovieScene3D 直下に配置しなければならない
1. scene は MovieScene3D
Scene3D は 3D オブジェクトへのマウスイベント付加に対応していません。
Scene3D のサブクラスである MovieScene3D を使う必要があります。
ところで、世間に出回ってる各種 Papervision3D ソースでは、scene として使われているのは Scene3D の方が多い印象を受けます。
PaperCloud のソースを参照しながら、自作の PV3D 用フォーマットソースにマウスイベント対応させようとして、scene を MovieScene3D に切り替え忘れて慌てたのは、どこのどいつだ~い? 私だよー!
そんな感じで、F-site のエントリーは、読み手にとって若干説明不足になってしまう可能性がなきにしもあらず。
scene に Scene3D ではなく MovieScene3D を使うということが、特に明示されていませんので(記事中のコードや配布ソースはもちろん MovieScene3D になってますが)。
そんなときに大いなる救済となるのが Unknown Quality のエントリー。
本文をお書きになった管理人さんと、コメントをお書きになった閲覧者さんのお二人の華麗な連係プレーに感謝。
2. オブジェクトは MovieScene3D 直下に配置
MovieScene3D は、その直下に配置した 3D オブジェクトにのみマウスイベントを付加させる機能を持っています。
ところで、たいていのソースでは rootNode という DisplayObject3D を作って、それに対して複数の 3D オブジェクトを addChild していくというコード手法をとっています。
そして rootNode を rotation[X|Y|Z] すると、複数の 3D オブジェクト全部が rotation[X|Y|Z] するという、まったくもって便利この上ない仕組みになっているわけです。
しかし MovieScene3D の直下に配置した 3D オブジェクトにしかマウスイベントが付加できないということは、この階層構造的配置が使えない、つまり一括で数多の 3D オブジェクトを回転させるという便利な手法が使えない。
3D オブジェクトを動かしたいと思った場合、それぞれ個別に動かすか、それともカメラを動かすか、That is the Question. という設計上の選択を迫られるわけですね。
コーダーにとってかなり大きな影響をもたらす仕様です。