papervision3d相机旋转(papervision3d camera orbit)

xiaoxiao2026-05-24  13

[flash=640,480]/upload/attachment/128686/8d84b345-52ce-3dfb-b160-709790e1eb3e.jpg[/flash] 代码如下: package{ import flash.events.MouseEvent; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class OrbitingCameraExample extends BasicView { private var isOribiting:Boolean; private var cameraPitch:Number = 90; private var cameraYaw:Number = 270; private var cameraTarget:DisplayObject3D = DisplayObject3D.ZERO; private var previousMouseX:Number; private var previousMouseY:Number; private var light:PointLight3D; public function OrbitingCameraExample() { light = new PointLight3D(); var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xcc0000); var sphere1:Sphere = new Sphere(material, 300, 10, 10); var sphere2:Sphere = new Sphere(material, 100, 10, 10); sphere2.x = 300; sphere2.y = 300; sphere2.z = 700 var sphere3:Sphere = new Sphere(material, 100, 10, 10); sphere3.x = 600; sphere3.y = -400; sphere3.z = -200; var sphere4:Sphere = new Sphere(material, 100, 10, 10); sphere4.x = -700; sphere3.z = -100; scene.addChild(sphere1); scene.addChild(sphere2); scene.addChild(sphere3); scene.addChild(sphere4); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); startRendering(); } private function onMouseDown(event:MouseEvent):void { isOribiting = true; previousMouseX = event.stageX; previousMouseY = event.stageY; } private function onMouseUp(event:MouseEvent):void { isOribiting = false; } private function onMouseMove(event:MouseEvent):void { var differenceX:Number = event.stageX - previousMouseX; var differenceY:Number = event.stageY - previousMouseY; if(isOribiting) { 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; camera.orbit(cameraPitch, cameraYaw, true, cameraTarget); } } }}
转载请注明原文地址: https://www.6miu.com/read-5049320.html

最新回复(0)