相机性能的测试代码主要分二部分:
// import containers import away3d.containers.*; // import core library import away3d.core.base.*; // import geometry primitives import away3d.primitives.*; //import math objects import away3d.core.math.*; import away3d.cameras.*; var scene1:Scene3D=new Scene3D(); // create carousel elements var plane:Object3D = new RegularPolygon({material:"grey#white", radius:500, y:-100, pushback:true}); var sphere1:Object3D = new Sphere({material:"blue#cyan", radius:50, y:75}); var sphere2:Object3D = new Sphere({material:"blue.jpg", radius:50, y:-75}); var cube1:Object3D = new Cube({material:"green#lime", y:75}); var cube2:Object3D = new Cube({material:"green.jpg", y:-75}); var spheres:Object3D = new ObjectContainer3D({x:400}, sphere1, sphere2); var cubes:Object3D = new ObjectContainer3D({x:-400}, cube1, cube2); var torus1:Object3D = new Torus({material:"red.jpg", z:-400}); var torus2:Object3D = new Torus({material:"yellow.jpg", z:400}); // create carousel of the elements var carousel:Object3D = new ObjectContainer3D(spheres, cubes, torus1, torus2, plane); // add carousel to the scene scene1.addChild(carousel); /*************************第一种相机:旋转相机************************************** var camera1:HoverCamera3D=new HoverCamera3D({zoom:10, focus:50,distance:1000}); camera1.yfactor=1; //镜头的y轴拉伸变形感,值为1是,横向和纵向等比例,值越大时,y轴的缩放比例越大 camera1.wrappanangle=false;//鼠标滑出舞台区域时,相机位置是否仍然转动 camera1.maxtiltangle=90;//设置相机的最大倾斜角度 camera1.mintiltangle=0;//设置相机的最小倾斜角度 //(初始角度)panangle表示初始状态水平角度 tiltangle表示初始状态的倾斜角度 camera1.panangle = 0; camera1.tiltangle = 45; //targetpanangle和targettiltangle的默认值都为0,从初始状态的水平角度,和倾斜角度的机位置运动到当前位置 // 默认值都为0,当不定义时,则由初始角度向水平:0;倾斜:0的位置运动 camera1.targetpanangle = 0; //设置相机从初始的平移角度运动到当前的角度(从panangle到targetpanangle) camera1.targettiltangle = 0; //设置相机从初始的倾斜角度运动到当前的角度(从tiltangletargettiltangle) //相机到位的速度,设置值越大时,运动越平滑,设置为0时,将会瞬间到达 camera1.steps = 16; //更新机位 function updateCamera1(){ // rerender viewport if (move) { trace("go"); //每一次的camera.targetpanangle位置从当前位置开始(lastPanAngle = camera.targetpanangle,MouseDown时,开始计时) camera1.targetpanangle = 0.3*(stage.mouseX - lastMouseX) + lastPanAngle; camera1.targettiltangle = 0.3*(stage.mouseY - lastMouseY) + lastTiltAngle; } //trace(camera1); camera1.hover(); } //鼠标控制机位置 import flash.display.*;//可略 import flash.events.*;//可略 //navigation variables var move:Boolean = false; var lastPanAngle:Number; var lastTiltAngle:Number; var lastMouseX:Number; var lastMouseY:Number; stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown1); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp1); function onMouseDown1(event:MouseEvent):void { lastPanAngle = camera1.targetpanangle; lastTiltAngle = camera1.targettiltangle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; trace("mouseDowen "+move); //stage.addEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); } function onMouseUp1(event:MouseEvent):void { move = false; trace("mouseUp "+move); //stage.removeEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); } */ /************************第二种摄像机:自由相机和目标相机***********************************************/ var lastKey:uint; var keyIsDown:Boolean = false; //自由相机 //var camera1:Camera3D= new Camera3D(); //目标相机 var camera1:TargetCamera3D= new TargetCamera3D(); //改变相机坐标,可以改变相机与物体的角度 camera1.z =-1000; camera1.x=1000; camera1.y=0; camera1.lookAt(torus1.position); stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown1); stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp1); function onKeyDown1(param1:KeyboardEvent) : void { lastKey = param1.keyCode; keyIsDown = true; trace(lastKey); return; }// end function function onKeyUp1(param1:KeyboardEvent) : void { keyIsDown = false; return; }// end function //更新摄像机的机位 //向上,向下,向左,向右,拉近,拉远6种状态,(改变相机坐标,可以改变相机与物体的角度) function updateCamera1() : void { if (keyIsDown) { switch(lastKey) { case 83: { camera1.moveUp(10); break; }// end case case 87: { camera1.moveDown(10); break; }// end case case 68: { camera1.moveLeft(10); break; }// end case case 65: { camera1.moveRight(10); break; }// end case case Keyboard.UP: { camera1.moveForward(10); break; }// end case case Keyboard.DOWN: { camera1.moveBackward(10); break; }// end case default: { break; }// end default }// end switch }// end if return; }// end function //**********************************************增加可视窗口*********************************************// // create a 3D-viewport var view:View3D = new View3D({scene:scene1,camera:camera1}); view.x=300; view.y=200; // add viewport to the stage addChild(view); // every frame addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event):void { // rotate carousel carousel.rotationY = getTimer() / 100; // rotate pairs spheres.rotationZ = getTimer() / 10; cubes.rotationX = getTimer() / 10; // lift tori torus1.y = Math.sin(getTimer() / 1000) * 50; torus2.y = Math.cos(getTimer() / 1000) * 50; updateCamera1();//更新摄像机机位置 view.render(); }