2012-05-27 104 views
3

我有一个带有三个js的webgl应用程序。它使用TrackballControls控制相机。我有一个我想用来重置场景的按钮,所以相机应该进入初始状态。目前,我有这个(jQuery的):使用TrackballControls时重置摄像头位置/旋转

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

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

回答

1

camera.position应始终保持最新状态,确保您正在寻找合适的camera,并且它没有超出范围。理想情况下,它应该是窗口上的全局变量。

关于camera.rotation,你应该检查一下你的相机有:

camera.useQuaternion == true 

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


编辑:当它从https://github.com/mrdoob/three.js/issues/821看来也的确是有手动调节是搅乱TrackballControlscamera的错误。

+0

场景中只有一个摄像头,它通过“摄像头”变量在脚本内有一个全局范围,所以它应该工作?但是,它并没有。 – SeeDoubleYou

+0

是的,我明白你的意思了。我在http://mrdoob.github.com/three.js/examples/misc_camera_trackball.html上测试了这个,肯定有一个bug。看看https://github.com/mrdoob/three.js/issues/821,它可能值得再看一次。 –

+0

这些按钮对我来说也不是真的有用(w,a,s,d)。发生了一些事情,但它非常流行,并且不清楚发生了什么。 – SeeDoubleYou