使用 TrackballControls 时重置相机位置/旋转

问题描述 投票:0回答:4

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

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

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

javascript jquery webgl three.js
4个回答
6
投票

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

更新: TrackballControls 现在有一个

reset()
方法。补间完成后调用此函数,一切顺利! (https://github.com/mrdoob/ Three.js/commit/4f800f61809560c434bbbf12e76c3931e8e8c0fb


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


1
投票

不要将camera.rotation更改为(0,0,0),而是将camera.up更改为(0,1,0)。您也可以使用 Tween 来制作动画。


0
投票

这个问题不久前就被问到了,但我遇到了这个问题,并找到了最新

TrackBallControls
版本的解决方法。除了
camera.position
camera.rotation
之外,还必须将
camera.up
设置为所需的坐标。

设置重置坐标时,请设置所有 3 个坐标:位置、旋转和向上。当切换到重置坐标时,请重新设置所有 3 个坐标。这对我有帮助,希望有用。

更多请参见:camera.up在Three.js中有什么效果?

© www.soinside.com 2019 - 2024. All rights reserved.