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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值