使用轨迹球控制时重置摄像机位置/旋转

Reset camera position/rotation when using TrackballControls

本文关键字:摄像机 位置 旋转 轨迹球 控制      更新时间:2023-09-26

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

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

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

在错误修复之前(请参阅对Yuval Adam的回答的评论),一个可行的(虽然很脏)的解决方案是从场景中移除摄像机,然后创建一个新摄像机,向其添加控件并将新摄像机添加到场景中。

更新:轨迹球控件现在有一个reset()方法。补间完成后调用它,一切都很好!(https://github.com/mrdoob/three.js/commit/4f800f61809560c434bbbf12e76c3931e8e8c0fb)

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

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

camera.useQuaternion == true

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


编辑:从 https://github.com/mrdoob/three.js/issues/821 看来,手动调整camera确实存在错误,这会弄乱TrackballControls

不要将 camera.rotate 更改为 (0,0,0),而是将 camera.up 更改为 (0,1,0)。您也可以使用补间来为其设置动画。