Papervision3D の InteractiveScene3D(2)
2007/08/09 20:32 - Papervision3D
しつこく何度も繰り返しますが、Papervision3D において、Plane や Sphere などの DisplayObject3D にマウスイベントを付加したり、あるいはフィルターを適用したりといったことをおこなうには、Scene に MovieScene3D を使い、各 DisplayObject3D をその直下に addChild する必要があります。
なぜならオブジェクト本体である DisplayObject3D クラスも、オブジェクトのスキンとなる MaterialObject3D クラスも、flash.display.DisplayObject を継承していないし、独自にプロパティ設定もなされていないからです。
そのための解決手段として用意されているのが MovieScene3D に DisplayObject3D を addChild したときに生成される DisplayObject3D.container という Sprite です。
この Sprite に対して、イベントを付加したり、フィルターを適用したり、ブレンドモードを変更したりといったことをしてね、とドキュメントの DisplayObject3D の項に明記されています。
ところで、Papervision3D がなぜこんなに扱いやすいのかというと、以前も触れましたが、DisplayObject3D を階層構造で管理できるからでしょう。
rootNode という実体のない DisplayObject3D を Scene にぶら下げて、その rootNode に子ノードとして実体のあるオブジェクトをぶら下げる。
そして、rootNode を rotation[X|Y|Z] させるだけで、全てのオブジェクトに rotation[X|Y|Z] が適用される。
実にすばらしい設計ではないですか。
で、またまた繰り返しますが、MovieScene3D 直下に addChild しなければならないということは、DisplayObject3D が階層構造を構成できないということ。
となると 各オブジェクトに rotationX と rotationY を組み合わせた回転をさせたいと思った場合、どーしたらいいんよ?
全オブジェクトに対して個別に rotation かけても、公転的な動きじゃなくて、単なる自転にしかならないし。
4×4行列の三次元マトリクスクラスを別途作成して、その回転を Camera3D に適用させるとか、今さらやりたくないし。
実に不便です。困ったー。