- 2007-07-27 0:18
- 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 ); } } }
関連のありそうなエントリ
- Newer: Papervision3Dのプリミティブ・オブジェクト - Cone, Cube, Cylinder, Sphere -
- Older: Papervision3Dのオブジェクトにテクスチャを貼付ける
Comments:0
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
