【问题标题】:ThreeJS cant move cameraThreeJS无法移动相机
【发布时间】:2017-03-06 16:15:52
【问题描述】:

我试图通过改变它的世界矩阵来移动相机。但这似乎不起作用。无论如何相机都不会移动。

camera.matrixAutoUpdate = false
camera.matrixWorld = portal_view(camera,port1_quad,port2_quad)

我已经尝试使用 matrixupdate = true 但仍然没有。我在做什么错?

function portal_view(camera, src_portal, dst_portal) {
                var inverse_view_to_source = new THREE.Matrix4().getInverse(camera.matrix).multiply(src_portal.matrix);
                var new_mat = dst_portal.matrix.clone().multiply(inverse_view_to_source);
                new_mat.makeRotationY(3.14);

                return new_mat;
            }

【问题讨论】:

    标签: three.js


    【解决方案1】:

    对象的matrixWorld 是根据其positionquaternionscale 计算得出的。您不能直接更改对象的“矩阵世界”。换句话说,如果您更改matrixWorld,则更改不会反映在对象的position 上。您必须更改相机的position

    您可以做的是,从矩阵中提取translationrotation,并根据它更改相机positionquaternion

    【讨论】:

    • camera.updateMatrix() 会更新矩阵并且位置和旋转会改变。现在我只需要弄清楚方程式有什么问题。
    • Camera.updateMatrix()Object3D.updateMatrix() 不会更改对象的 positionquaternion。它只会使用当前的positionquaternionscale 更新当前的转换矩阵。
    • 更改 matrixWorld 效果很好。您只是不能调用更新,否则您将丢失更改。问题实际上出在 portal_view 函数中。 ThreeJS 框架有点笨拙,所以如果你调用逆或乘法或旋转,它不会总是改变值。我不得不和他们混在一起,这样他们才能真正开始工作。为什么改变矩阵世界有效是因为在背景相机上无非是 glUniformMatrix4fv(uniform_v_inv, 1, GL_FALSE,viewMatrix);或类似的东西。 ThreeJS 相机只是一个界面,让它更易于使用。
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2017-09-21
    • 2021-12-31
    • 2018-08-30
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多