Flash3D编程技巧:物体环视浏览器(Away3D)

本文介绍了一种使用HoverCamera3D实现3D视图中相机交互的方法,包括初始化相机属性、监听鼠标事件以控制相机旋转角度,并通过帧更新来平滑过渡到新位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义一些以后会用到的变量:

private var View:View3D;

// HoverCam controls
private var camera:HoverCamera3D;
private var lastMouseX:Number;
private var lastMouseY:Number;
private var lastPanAngle:Number;
private var lastTiltAngle:Number;
private var move:Boolean = false;

 

增加一个HoverCamera3D并且设置它为视图要使用的camera:

camera = new HoverCamera3D({zoom:2, focus:100, distance:250});
View = new View3D({camera:camera,x:250, y:200});

 

设置camera的一些初始属性值:

camera.targetpanangle = camera.panangle = 45;
camera.targettiltangle = camera.tiltangle = 20;
camera.mintiltangle = -90;

 

启用ENTER_FRAME侦听器:

addEventListener(Event.ENTER_FRAME, onEnterFrame);

 

启用鼠标按下、释放侦听器:

this.stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
this.stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp);

 

鼠标按下的时候,需要记录下camera的一些当前参数:

private function MouseDown(event:MouseEvent):void
{
    lastPanAngle = camera.targetpanangle;
    lastTiltAngle = camera.targettiltangle;
    lastMouseX = stage.mouseX;
    lastMouseY = stage.mouseY;
    move = true;
}

 

鼠标释放的时候,需要停止渲染场景:

private function MouseUp(event:MouseEvent):void
{
    move = false;
}

 
where 'the magic' happens:重新计算新的camera位置

private function onEnterFrame(e:Event):void
{
    // rerender viewport
    var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement.
    if (move) {
        camera.targetpanangle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle;
        camera.targettiltangle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle;
    }
    camera.hover();
    View.render();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值