Home > papervision3d > Papervision3Dでシンプルなオブジェクトを回転させる

Papervision3Dでシンプルなオブジェクトを回転させる

Papervision3Dのインストールが完了したら、次は実際にプログラミングに入ります。

まず、Papervision3Dがどういう構成になっているのかを知るため、シンプルなオプジェクトを回転させるプログラムを紹介します。

Flashの基本
stageの設定

Flashの基本はツリー構造です。
あらかじめ準備されているstageというルートノードにaddChildでノードをぶら下げていく事で、Flashの画面にオブジェクトを表示する事ができます。Papervision3Dにおいても例外ではありません。

すなわち、一番始めにやることは、stageの設定です。

stage.frameRate = 60;
stage.quality   = "MEDIUM";
stage.scaleMode = "noScale";
stage.align = StageAlign.TOP_LEFT;

stageの様々なプロパティを設定しています。余裕があれば、これらのプロパティの意味や、別のプロパティを調べてみると面白いかもしれません。

コンテナの生成

全てのオブジェクトの受け皿となるコンテナを生成します。

container = new Sprite();
container.x = 200;
container.y = 200;

ついでにコンテナの位置も決めています。
このコンテナをstageにaddChildでぶら下げます。

stage.addChild( container );
3Dオブジェクトを作る
シーンを作る

Papervision3Dの3Dオブジェクトの基礎となるシーンを生成します。

scene = new Scene3D( container );

コンストラクタの引数にはコンテナを指定します。
このコンテナに、全てのオブジェクトがレンダリングされます。

3Dオブジェクトのrootを作る

Papervision3Dの受け皿となるrootノードを作成します。

rootNode = new DisplayObject3D();

これを、シーンに追加しておきます。

scene.addChild( rootNode );
オブジェクトを作成する

今回は、厚みの無い板を作成します。

//マテリアル設定
material = new ColorMaterial( 0xffffff, 1 );
material.oneSide = false;
 
//Planeオブジェクト生成
planeObj = new Plane( material, planeSize, planeSize, segment, segment );

作成したオブジェクトをrootノードにぶら下げます。

rootNode.addChild( planeObj );
カメラの設定をします

今回は、カメラは固定とします。
最終的にディスプレイに表示されるのは、このカメラからの視点になります。
つまり、カメラから見た映像がレンダリングされることになります。

camera = new Camera3D();
camera.z = -planeSize;
camera.focus = 50;
camera.zoom = 1;

ここまでで、初期設定が終わりました。

イベントの設定

今回は、オブジェクトをグルグル回転させたいので、イベントとしてENTER_FRAMEを利用する。

stage.addEventListener(Event.ENTER_FRAME, loop);

第二引数のloopは、このイベントが発生した時に呼び出される関数である。

ループ関数を記述する

上記のENTER_FRAMEイベントにより、指定されたフレームレート毎に呼び出される関数を定義します。

今回は、Y軸を中心に回転するようにします。

private function loop( event:Event ):void
{
 // Y軸回転
 planeObj.rotationY += 5;
}

回転させた結果を再レンダリングする必要があります。
レンダリングの視点はカメラであることを思い出して、以下のようにします。

private function loop( event:Event ):void
{
 // Y軸回転
 planeObj.rotationY += 5;
 // 再レンダリング
 scene.renderCamera( camera );
}
結果

うまく行けば以下の様なぺらぺらのオブジェクトがマッタリと回転してくれます。

ソースコード

このソースコードの全容を公開します。最もシンプルな形だと思いますので、入門として参考にしてください。

package {
    import flash.display.*;
    import flash.events.*;
 
    import org.papervision3d.scenes.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
 
    [SWF(backgroundColor=0x000000)]
 
    public class MyPlane extends Sprite
    {
        private var container : Sprite;
        private var scene     : Scene3D;
        private var camera    : Camera3D;
        private var rootNode  : DisplayObject3D;
 
        private var planeObj  : DisplayObject3D;
        private var planeSize : int = 300;//Planeオブジェクト1辺の長さ
        private var segment   : int = 1;  //面の分割数
        private var material  : ColorMaterial;
 
        private var valx      : Number = 0;
        private var valy      : Number = 0;
 
        //---------------------------------------------Constructor
        public function MyPlane():void
        {
            stage.frameRate = 60;
            stage.quality   = "MEDIUM";
            stage.scaleMode = "noScale";
            stage.align = StageAlign.TOP_LEFT;
 
            //コンテナ生成
            container = new Sprite();
            container.x = 200;
            container.y = 200;
            stage.addChild( container );
 
            //シーン生成
            scene = new Scene3D( container );
 
            //rootNode生成
            rootNode = new DisplayObject3D();
            scene.addChild( rootNode );
 
            //マテリアル設定
            material = new ColorMaterial( 0xffffff, 1 );
            material.oneSide = false;
 
            //Planeオブジェクト生成
            planeObj = new Plane( material, planeSize, planeSize, segment, segment );
            rootNode.addChild( planeObj );
 
            //camera設定
            camera = new Camera3D();
            camera.z = -planeSize;
            camera.focus = 50;
            camera.zoom = 1;
 
            stage.addEventListener(Event.ENTER_FRAME, loop);
        }
 
        //---------------------------------------------loop                                                                     
        private function loop( event:Event ):void
        {
            // Y軸回転
            planeObj.rotationY += 5;
 
            //再レンダリング
            scene.renderCamera( camera );
        }
    }
}
関連のありそうなエントリ

Comments:0

Comment Form
Remember personal info

*
To prove that you're not a bot, enter this code
Anti-Spam Image

Trackbacks:0

Trackback URL for this entry
http://www.adamrocker.com/blog/125/papervision3d_simple_plane.html/trackback/
Listed below are links to weblogs that reference
Papervision3Dでシンプルなオブジェクトを回転させる from throw Life

Home > papervision3d > Papervision3Dでシンプルなオブジェクトを回転させる

Search
Feeds
Meta

Return to page top