使用TrackballControls时重置摄像机位置/旋转

时间:2012-05-27 21:06:21

标签: javascript jquery webgl three.js

我有一个带有threejs的webgl应用程序。它使用TrackballControls来控制相机。我有一个按钮,我想用它来重置场景,因此,相机应该进入初始状态。我目前有这个(jquery):

$('#reset').click(function() {
    camera.position.set(0, 0 , 400);
    camera.rotation.set(0, 0, 0);
});

但奇怪的是,当我记录位置和旋转时,它们不是应该的,并且相机不在正确的位置。我做错了什么,有更好的方法吗?

3 个答案:

答案 0 :(得分:6)

在修复bug之前(参见Yuval Adam的回答评论),一个工作(虽然很脏)的解决方案是从场景中删除相机,然后创建一个新的,添加控件并添加新相机到现场。

<强>更新 TrackballControls现在有一个reset()方法。在补间完成后调用此方法,一切顺利! (https://github.com/mrdoob/three.js/commit/4f800f61809560c434bbbf12e76c3931e8e8c0fb

答案 1 :(得分:1)

camera.position应该始终是最新的,请确保您正在查看正确的camera并且它不在范围之外。理想情况下,它应该是窗口上的全局变量。

关于camera.rotation,你应该检查你的相机是否有:

camera.useQuaternion == true

某些控件将此设置为相机作为先决条件。如果是这种情况,摄像机角度由camera.quaternion设置,而不是由camera.rotation设置。当然,TrackballControls没有这种行为(至少从r49开始)。


修改:从https://github.com/mrdoob/three.js/issues/821开始,确实存在手动调整camera混淆TrackballControls的错误。

答案 2 :(得分:1)

不是将camera.rotation更改为(0,0,0),而是将camera.rotate更改为(0,1,0)。您也可以使用Tween对其进行动画处理。