3

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

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

但奇怪的是,当我记录位置和旋转时,它们不是应有的样子,并且相机不在正确的位置。我做错了什么,有没有更好的方法来做到这一点?

4

3 回答 3

6

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

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

于 2012-05-27T22:15:04.047 回答
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.

于 2012-05-27T21:13:19.113 回答
1

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

于 2020-07-29T18:56:28.997 回答