`
hje
  • 浏览: 283331 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

flex pv3d test

阅读更多
<?xml version="1.0" encoding="utf-8"?>
<mx:Application width="100%" height="100%" xmlns:mx="http://www.adobe.com/2006/mxml"  layout="absolute"
applicationComplete="applicationComplete()">
<mx:Script>
  <![CDATA[
  import org.papervision3d.objects.DisplayObject3D;
  import org.papervision3d.view.layer.ViewportLayer;
  import org.papervision3d.cameras.Camera3D;
  import org.papervision3d.objects.primitives.Plane;
  import org.papervision3d.materials.BitmapFileMaterial;
  import org.papervision3d.materials.WireframeMaterial;
  import org.papervision3d.materials.utils.MaterialsList;
  import org.papervision3d.objects.primitives.Cube;
  import org.papervision3d.core.utils.Mouse3D;
   import org.papervision3d.objects.primitives.Sphere;
   import org.papervision3d.view.BasicView;
   import mx.controls.Alert;
   private var sphere:Sphere;
   private var cube:Cube;
   private var cube2:Cube;
   private var basicView:BasicView;
   private var mouse3D:Mouse3D;
   private var plane:Plane;
   private var MyMouse3D:Mouse3D;
  
private var material:BitmapFileMaterial;
private var picTarget:String="pic/simple.jpg";
private var isOrbiting:Boolean=false;
private var previousMouseX:Number;
private var previousMouseY:Number;
    private var cameraPitch:Number=0;
    private var cameraYaw:Number=0;
    private var layer1:ViewportLayer;
private var layer2:ViewportLayer;
private var myMouse3D:Mouse3D;

   private function applicationComplete():void
   {
    basicView = new BasicView(1024,768,true,true,"Free"); //3D 窗体, 是一个 UIComponent
   
   
var frontMaterial:BitmapFileMaterial = new  BitmapFileMaterial("pic/front.jpg");
frontMaterial.smooth=true;
frontMaterial.interactive=true;
var backMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/back.jpg");
backMaterial.smooth=true;
backMaterial.interactive=true;
var leftMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/left.jpg");
leftMaterial.smooth=true;
leftMaterial.interactive=true;
var rightMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/right.jpg");
rightMaterial.smooth=true;
rightMaterial.interactive=true;
var topMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/top.jpg");
topMaterial.smooth=true;
topMaterial.interactive=true;
var bottomMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/bottom.jpg");
bottomMaterial.smooth=true;
bottomMaterial.interactive=true;

  /*   material=new BitmapFileMaterial(picTarget);
    material.doubleSided = true;//双面可见 */
var materialsList:MaterialsList = new MaterialsList();
materialsList.addMaterial(frontMaterial, "front");
materialsList.addMaterial(backMaterial, "back");
materialsList.addMaterial(leftMaterial, "left");
materialsList.addMaterial(rightMaterial, "right");
materialsList.addMaterial(topMaterial, "top");
materialsList.addMaterial(bottomMaterial, "bottom");
var insideFaces:int=Cube.ALL;
        var excludeFaces:int=Cube.NONE;

cube2 = new Cube(materialsList,50,50,50,8,8,8);

    cube = new Cube(materialsList,1024,2000,200,8,8,8,insideFaces,excludeFaces);
   
    material=new BitmapFileMaterial(picTarget);
    material.doubleSided = true;//双面可见
//width and height
var w:Number = 800;
var h:Number = 800;
//segmentsW and segmentsH
var sW:Number = 1;
var sH:Number = 1;
/* var initObject:Object = new Object();

initObject.x = 100;

initObject.rotationY = 30;

initObject.scaleZ = 20;

//Option #1 using initObject可选1使用initObject */
   plane= new Plane(material, w, h, sW, sH);

   // plane=new Plane(material,1000,500);
    //cube=new Cube(materialsList,600,600,600);
    sphere= new Sphere(null,100,20,20); //3D球体,属性依次是材质,半径,水平方向三角形数量,垂直方向三角形数量
   
   
   
    //basicView.scene.addChild(sphere); //把球体加入到 3D 窗体中
    basicView.scene.addChild(cube);
    basicView.scene.addChild(cube2);
    layer1=this.basicView.viewport.getChildLayer(cube); //解决破面的问题 
        layer2=this.basicView.viewport.getChildLayer(cube2); 
    cube2.y=-75;
   // basicView.scene.addChild(plane);
    myMouse3D=this.basicView.viewport.interactiveSceneManager.mouse3D;
    Mouse3D.enabled=true;
   
    basicView.startRendering(); // 显示
   
    pv3dPanel.rawChildren.addChild(basicView); //把3D窗体加入到panel中
    basicView.addEventListener(Event.ENTER_FRAME,onFrame);
   // mouse3D = basicView.viewport.interactiveSceneManager.mouse3D;/* 创建虚拟3d鼠标 */
   // basicView.addEventListener(MouseEvent.MOUSE_DOWN,onClick);
   Mouse3D.enabled = true;
   basicView.viewport.interactive=true;
       MyMouse3D =this.basicView.viewport.interactiveSceneManager.mouse3D;//.viewport.interactiveSceneManager.mouse3D;/* 创建虚拟3d鼠标 */
    //cube.x=600;
   //basicView.viewport.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
  
   basicView.addEventListener(MouseEvent.MOUSE_WHEEL,onWheels);
   this.stage.addEventListener(MouseEvent.MOUSE_DOWN,testMouseDown);
   this.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
  // basicView.addEventListener(MouseEvent.MOUSE_MOVE,testMouseMove);//onMouseMove
   //this.stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
   this.stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
   }
   private function onMouseUp(event:MouseEvent):void
   {
   isOrbiting=false;
        //layer1=this.basicView.viewport.getChildLayer(cube);  
        //layer2=this.basicView.viewport.getChildLayer(cube2);
   }
   private function onMouseDown(event:MouseEvent):void
   {
   isOrbiting=true;
   previousMouseX=event.stageX;
   previousMouseY=event.stageY;
   //layer1.removeDisplayObject3D(cube);  
        //layer2.removeDisplayObject3D(cube2);
   }
   private function onWheels(event:MouseEvent):void
   {
   basicView.camera.moveForward(10*event.delta);
   }
   private function onKeyDown(event:KeyboardEvent):void
   {
   //Alert.show(event.keyCode.toString());
/*     if(event.keyCode==37)//左
   {
   cube2.x=cube2.x-10;
   basicView.camera.moveLeft(cube2.x);
   }else if(event.keyCode==39)//右
   {
   cube2.x=cube2.x+10;
   }else if(event.keyCode==38)//上
{
cube2.z=cube2.z+10;
}else if(event.keyCode==40)//下
{
cube2.z=cube2.z-10;
}  */
cube2.yaw(10);
cube2.moveForward(20);
//basicView.camera.lookAt(cube2); 

  
   }
   private function onKeyUp(event:KeyboardEvent):void
   {
      if(event.keyCode==37)//左
   {
  
   }else if(event.keyCode==39)//右
   {
  
   }else if(event.keyCode==38)//上
{

}else if(event.keyCode==40)//下
{


  
   }
   private function onMouseMove(event:MouseEvent):void
{
var differenceX:Number = event.stageX - previousMouseX;
var differenceY:Number = event.stageY - previousMouseY;
   

if(isOrbiting==true)
{
/* cameraPitch += differenceY;
cameraYaw += differenceX;

cameraPitch %= 360;
cameraYaw %= 360;

cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001;
cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999;

previousMouseX = event.stageX;
previousMouseY = event.stageY;
cube.yaw(cameraYaw); */
/* cube.pitch(
cube.rotationX */
//cube.pitch(cameraPitch);
//basicView.camera.orbit(cameraPitch,cameraYaw);
        // update the camera angles
        cameraPitch -= differenceY;
        cameraYaw -= differenceX;
        // limit the pitch of the camera
        if(cameraPitch <= 0)
        {
          cameraPitch = 0.1;
        } else if (cameraPitch >= 180)
        {
          cameraPitch = 179.9;
        }
        // reset the last mouse position
previousMouseX = event.stageX;
previousMouseY = event.stageY;
        // reposition the camera
        //basicView.camera.orbit(cameraPitch, cameraYaw);
       
       
}
}
private function onMove(evt:MouseEvent):void
{
     var OldX:int=basicView.viewport.width/2;
     var OldY:int=basicView.viewport.height/2;

    /*   if(-(basicView.viewport.mouseY-OldY)/1.5<80&&-(basicView.viewport.mouseY-OldY)/1.5>-80){
basicView.camera.rotationX=-(basicView.viewport.mouseY-OldY)/1.5;
     }  */
// basicView.camera.rotationX=(basicView.viewport.mouseY-OldY)/1.25;
if(isOrbiting==true)
{
       basicView.camera.rotationY=(basicView.viewport.mouseX-OldX)/1.25;
}
     // basicView.camera.lookAt(sphere);
}
private function onMove2(event:MouseEvent):void
{
var rotX:Number = (stage.mouseX-(stage.stageWidth / 2))*(0.08)-90;
var rotY:Number = (stage.mouseY-(stage.stageHeight / 2))*(0.08)+90;
basicView.camera.orbit(-rotY, -rotX);


}
private function testMouseDown(event:MouseEvent):void
{
/* var distance:Number=cube2.x-myMouse3D.x;
Alert.show(distance.toString());
if(distance<0)
{

cube2.moveForward(distance);
} */

if(timer!=null)
{
timer.stop();
}
var dx:Number= myMouse3D.x - cube2.x;//物体旋转+移动
var dz:Number =  myMouse3D.z- cube2.z;
cube2.rotationY = Math.atan2(dx, dz) * 180 / Math.PI;
//cube2.moveForward(30);
var lastMousex:Number=myMouse3D.x;
var lastMousez:Number=myMouse3D.z;
ObjectMove(cube2,lastMousex,lastMousez);
/* var rotX:Number = (stage.mouseX-(stage.stageWidth / 2))*(0.08)-90;
var rotY:Number = (stage.mouseY-(stage.stageHeight / 2))*(0.08)+90;
basicView.camera.orbit(-rotY, -rotX);  */
}
private var timer:Timer;
private function ObjectMove(objectId:DisplayObject3D,lastMousex:Number,lastMousez:Number):void
{
if(timer!=null)
{
timer.removeEventListener(TimerEvent.TIMER,timerHander);
timer=null;
}
timer=new Timer(25,0);
timer.start();
timer.addEventListener(TimerEvent.TIMER,timerHander);
function timerHander(event:TimerEvent):void
{
var dx:Number=Math.abs( lastMousex- objectId.x);
var dz:Number = Math.abs(lastMousez- objectId.z);
if(dx<=2 && dz<=2)
{
objectId.x=lastMousex;
objectId.z=lastMousez;
timer.removeEventListener(TimerEvent.TIMER,timerHander);
timer=null;
}else
{
objectId.moveForward(2);
}
}
}

   private function onFrame(event:Event):void
   {
  sphere.rotationX++;
  /*cube.rotationX++;
   cube.rotationY++;
   cube.rotationZ++; */
  
   //plane.rotationX++;
  
   //plane.rotationY++;
   //plane.rotationY++;
  
   /* basicView.camera.rotationX++;
   basicView.camera.rotationY++;
   basicView.camera.rotationZ++; */ 
   //basicView.camera.z=-500;
   //basicView.camera.rotationX=MyMouse3D.x;
   //basicView.camera.rotationY=MyMouse3D.y;
   //basicView.camera.rotationZ=MyMouse3D.z;
  
   //basicView.camera.rotationY++;
   //basicView.cameraAsCamera3D.rotationX++; // 显示
   //basicView.camera.rotationX++;
  
   //basicView.camera.y++;
   //cube.rotationY++;
   //basicView.camera.lookAt(sphere,null);
   }
  ]]>
</mx:Script>
<mx:Panel id="pv3dPanel" title="Papervision3D Panel" width="100%" height="100%" backgroundColor="#E0BF0B">
  <mx:Label text="Label" id="labels"/>
</mx:Panel>
</mx:Application>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics