Papervision3D の InteractiveScene3D(5)
2007/08/14 19:53 - Papervision3D
InteractiveScene3D による、階層構造を持った DisplayObject3D に対してマウスイベントを付加するコードを書いてみたが、公式サンプルのようにグローフィルターの適用ができなかったという話を前回しました。
上記コードを書いてのち、いろいろ調べてみたんですが、どうも InteractiveScene3D 使用時の InteractiveScene3DEvent.sprite(以下"sprite") は MovieScene3D 使用時の DisplayObject3D.container(以下"container") の代替物にはならないっぽい、ということが徐々に分かってきました。
もっとも自分がやりたいこと(フォグ効果の付加)は、よく考えるとマウスイベント発生時にのみ取得できる"sprite"では対応できないので、仮に代替物となってもあまり意味がないことも悟りましたが。
ここでちょっとお断り。
以下に述べることは、InteractiveScene3D 絡みの全容を把握した上での発言ではありません。 解析中なので分からないことがまだまだあります。 もしかしたら事実誤認があるかもしれません。 その場合はご教示いただけると幸いです。
話を戻します。
MovieScene3D における "container" は、言わば DisplayObject3D の影ともいうべきものと私は理解しています。
Sprite 型である "container" には、camera3D によってレンダリングされた DisplayObject3D の姿がそのまま(スキンであるマテリアルやオブジェクトの座標位置から計算される形態の歪みなど)表示されてます。
"container" は Sprite 型なので、マウスイベントの付加やフィルターの適用ができます。
その結果として、あたかも DisplayObject3D に対してマウスイベントが付加されたり、フィルターが適用されているかのように見えるのだと解釈しています。
ところが InteractiveScene3D における "sprite" は MovieScene3D における "container" とは全く異なるもののようです。
InteractiveScene3D を使ったサンプルで、どうしてもフィルター適用ができなかったなか、ふと思いついてイベントハンドラで "sprite" のアルファ値を trace してみました。
Plane をクリックすると trace の代わりに画面左下にアルファ値が表示されるようにしてあります。
どの Plane でも同じ値なので、一度表示されると、後はどの Plane をクリックしても、何も変化していないように見えます。
アルファ値が 0.00390625? これじゃフィルターかかってても見えるわきゃねー!
"sprite" はほぼ透明なのに、Plane は表示されている。
ということは、ここに表示されている正方形は、あくまでも Plane オブジェクトそのものであり、"container" のように影である Sprite 型オブジェクトが表示されているわけではないということだったんですね。