【问题标题】:Reset camera position/rotation when using TrackballControls使用 TrackballControls 时重置相机位置/旋转
【发布时间】:2012-06-02 09:17:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript jquery webgl three.js


    【解决方案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

    【讨论】:

    • 场景中只有一个摄像头,它通过“camera”变量在脚本中具有全局范围,所以它应该可以工作吗?不过,它没有。
    • 是的,我明白你的意思了。我在mrdoob.github.com/three.js/examples/misc_camera_trackball.html 上对此进行了测试,肯定有一个错误。看看github.com/mrdoob/three.js/issues/821,也许值得再看看。
    • 这些按钮对我也不起作用(w、a、s、d)。发生了一些事情,但非常令人震惊,不清楚到底发生了什么。
    • TrackballControls 工作得很好,直到你弄乱了camera.rotation是错误,不是别的。
    • 好的,但即使我不设置旋转,它仍然不会正确重置
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-06
        相关资源
        最近更新 更多