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 MoviePlane extends Sprite { private var container : Sprite; private var scene : MovieScene3D; 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; //---------------------------------------------Constructor public function MoviePlane():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 ); //シーン生成(Scene3D→MovieScene3Dでマウスで動かせるようになる?) scene = new MovieScene3D( container ); //rootNode生成 rootNode = new DisplayObject3D(); scene.addChild( rootNode ); //マテリアル設定 material = new ColorMaterial( 0x0000ff, 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, _enterframe); stage.addEventListener(Event.RESIZE, onStageResize); } //---------------------------------------------_enterframe private function _enterframe(e:Event):void{ planeObj.rotationY=container.mouseX; planeObj.rotationX=container.mouseY; material.updateBitmap(); scene.renderCamera( camera ); } //---------------------------------------------onStageResize private function onStageResize(e:Event):void{ container.x = this.stage.stageWidth / 2; container.y = this.stage.stageHeight / 2; } } }