Home > papervision3d > Papervision3Dでオブジェクトの周りにカメラを回転させる

Papervision3Dでオブジェクトの周りにカメラを回転させる

以前のエントリではオブジェクトを回転させていました。
今回はオブジェクトの周りにカメラを回転させてみます。
オブジェクトとほぼ同じなので簡単です。

カメラの回転

X軸回転をさせてみます。
プログラムのベースは以前のエントリ「Papervision3Dのオブジェクトにテクスチャを貼付ける」とほぼ同じです。

camera.y = 500 * (Math.sin(Math.PI*rot / 180));
camera.z = 500 * (Math.cos(Math.PI*rot / 180));

オブジェクトの周りを一定の距離でカメラを回転させたいので、数学的な計算がカメラの位置を決定するのに必要です。

結果はこうなります。

カメラが常にオブジェクトの中心を向いて回転しています。
しかも、カメラは常に上下が一致するように動くようです。
ですので、上のFlashムービーはどこか違和感があります。

比較のために、オブジェクトをX軸周りに回転させカメラを固定した場合をご覧下さい。

いかがでしょうか?こちらは、違和感がないように感じます。

ソースコード

今回のカメラをX軸周りに回転させるプログラムを公開します。

package {
    import flash.display.*;
    import flash.events.*;
 
    import org.papervision3d.scenes.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.cameras.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.core.proto.*;
 
    public class ImagePlaneCam extends Sprite
    {
        private var container : Sprite;
        private var scene     : Scene3D;
        private var camera    : CameraObject3D;
        private var rootNode  : DisplayObject3D;
 
        private var planeObj  : DisplayObject3D;
        private var planeW : int = 240;//Planeオブジェクトの幅
        private var planeH : int = 320;//Planeオブジェクトの高さ
        private var segment   : int = 1;  //面の分割数
        private var material  : MaterialObject3D;
 
        private var rot      : Number = 0;
 
        //---------------------------------------------Constructor
        public function ImagePlaneCam():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 BitmapFileMaterial( "adamrocker.jpg" );
            material.doubleSided = true;
 
            //Planeオブジェクト生成
            planeObj = new Plane( material, planeW, planeH, segment, segment );
            planeObj.x = 0;
            planeObj.y = 0;
            rootNode.addChild( planeObj );
 
            //camera設定
            camera = new Camera3D();
            camera.z = -500;
            camera.zoom = 2;
 
 
            stage.addEventListener(Event.ENTER_FRAME, loop);
        }
 
        //---------------------------------------------loop
        private function loop( event:Event ):void
        {
            // 回転
            rot += 1;
            camera.y = 500 * (Math.sin(Math.PI*rot / 180));
            camera.z = 500 * (Math.cos(Math.PI*rot / 180));
 
            //再レンダリング
            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/133/papervision3d_camera_rotation.html/trackback/
Listed below are links to weblogs that reference
Papervision3Dでオブジェクトの周りにカメラを回転させる from throw Life

Home > papervision3d > Papervision3Dでオブジェクトの周りにカメラを回転させる

Search
Feeds
Meta

Return to page top