Papervision3D を弄ってみた(2)
2007/03/18 22:53 - Papervision3D
三次元空間における動きの表現は、3つの観点があるという事を感じたと前回書きました。
3つの観点とは以下のものです。
- 世界を動かす
- 物体を動かす
- 視点を動かす
「世界を動かす」というのは、仮想的に構成した三次元空間そのもの全体を動かすことです。
前回の最後に載せた「期待どおりの動きをするサンプル」はこれに該当します。
コードを見ると分かるように、まず三次元空間そのものを作成し、それから、空間内に配置されるオブジェクト(このサンプルでは1個の正方形)を作成しています。
// ワールドを生成し、シーンに登録 world = scene.addChild( new DisplayObject3D( "world" ) ); // ワールド内のオブジェクトを生成 p = world.addChild( new Plane( new ColorMaterial( 0xCC3300 , 1 , { doubleSided:true } ) , edgeSize , edgeSize , seg , seg ) );
そして、onEnterFrame でおこなわれる動作として、次のような定義をしています。
world.rotationY = val; ^^^^^
このように動かしているのは world であり、正方形である p ではありません。
このサンプルだと三次元内の物体が1個だけなので分かりづらいかもしれませんが、p が p_0、p_1、p_2、...、p_n と増えていっても、動かすのは world だけです(私が参考にしたオリジナルのソースを入手してコードを見るとよく分かると思います)。
もちろん内部処理的には p_0、p_1、p_2、...、p_n と全オブジェクトに対して処理をしているんでしょうが、コーディングにおいて、そういったことを意識する必要はありません。
では world ではなく p を動かしても、三次元空間における動きが表現できるのではないか。
また、PV3D には視点となるカメラがクラスとして定義されているが、そのカメラを動かしても、三次元空間における動きが表現できるのではないか。
そういったことが考えられます。
それらを実験するために作ったのが以下のサンプルです。
物体を動かすサンプル
|
視点を動かすサンプル
|
- 物体を動かすサンプルのソース( 02ObjectMove.zip 1.03 KB )
- 視点を動かすサンプルのソース( 03CameraMove.zip 1.06 KB )
上記ソースは as ファイルのみです。fla は前回のソース 01WorldMove.zip のものがそのまま使えます。
前回の「期待どおりの動きをするサンプル(世界を動かすサンプル)」とまったく同じ動きをしていますが、doEveryEvent メソッドにおいて、動かしている物が異なります。
世界を動かすサンプル val += container.mouseX / 50; world.rotationY = val;
物体を動かすサンプル val += container.mouseX / 50; p.rotationY = val;
視点を動かすサンプル val += container.mouseX / 50; camera.x = Math.cos( val * Math.PI / 180 ) * edgeSize; camera.z = Math.sin( val * Math.PI / 180 ) * edgeSize;
この「世界」「物体」「視点」のそれぞれの動きを組み合わせることで、三次元空間内での複雑な動作表現が可能になるわけですが、その模索は次回以降に。