我有一个带有threejs的webgl应用程序。它使用TrackballControls来控制相机。我有一个按钮,我想用它来重置场景,因此,相机应该进入初始状态。我目前有这个(jquery):
$('#reset').click(function() {
camera.position.set(0, 0 , 400);
camera.rotation.set(0, 0, 0);
});
但奇怪的是,当我记录位置和旋转时,它们不是应该的,并且相机不在正确的位置。我做错了什么,有更好的方法吗?
答案 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对其进行动画处理。