我有一个带有 Threejs 的 webgl 应用程序。它使用 TrackballControls 来控制相机。我有一个按钮,我想用它来重置场景,因此,相机应该进入初始状态。我目前有这个(jquery):
$('#reset').click(function() {
camera.position.set(0, 0 , 400);
camera.rotation.set(0, 0, 0);
});
但奇怪的是,当我记录位置和旋转时,它们并不像应有的那样,并且相机不在正确的位置。我做错了什么,有更好的方法吗?
在错误得到修复之前(请参阅 Yuval Adam 的答案的评论),一种可行的(尽管很脏)解决方案是从场景中删除相机,然后创建一个新相机,向其添加控件并将新相机添加到场景中。场景。
更新: TrackballControls 现在有一个
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.rotation更改为(0,0,0),而是将camera.up更改为(0,1,0)。您也可以使用 Tween 来制作动画。
这个问题不久前就被问到了,但我遇到了这个问题,并找到了最新
TrackBallControls
版本的解决方法。除了 camera.position
和 camera.rotation
之外,还必须将 camera.up
设置为所需的坐标。
设置重置坐标时,请设置所有 3 个坐标:位置、旋转和向上。当切换到重置坐标时,请重新设置所有 3 个坐标。这对我有帮助,希望有用。