papervision3d相机旋转(papervision3d camera orbit)

[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);
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值