THREE.js:OrbitControl使用透视摄影机在z轴上平移

THREE.js:OrbitControl使用透视摄影机在z轴上平移,three.js,Three.js,我正在使用这个类,并试图用panFront替换panUp函数。我的目标是沿z轴移动相机 我做了以下更改,但似乎不起作用: var panFront = function() { var v = new THREE.Vector3(); return function panFront( distance, objectMatrix ) { v.setFromMatrixColumn( objectMatrix, 2 ); // get Z column of

我正在使用这个类,并试图用panFront替换panUp函数。我的目标是沿z轴移动相机

我做了以下更改,但似乎不起作用:

var panFront = function() {

    var v = new THREE.Vector3();

    return function panFront( distance, objectMatrix ) {

        v.setFromMatrixColumn( objectMatrix, 2 ); // get Z column of objectMatrix
        v.multiplyScalar( distance );

        panOffset.add( v );
    };

}();
解决方案:

已编辑

设置
v.y=0仅在xz轴上固定平底锅

var panFront = function() {

    let v = new THREE.Vector3();

    return function panFront( distance, objectMatrix ) {

        v.setFromMatrixColumn( objectMatrix, 2 ); // get Z column of objectMatrix
        v.y = 0;

        v.multiplyScalar( -distance );

        panOffset.add( v );
    };

}();
我将x和y分量设置为0。

解决方案:

已编辑

设置
v.y=0仅在xz轴上固定平底锅

var panFront = function() {

    let v = new THREE.Vector3();

    return function panFront( distance, objectMatrix ) {

        v.setFromMatrixColumn( objectMatrix, 2 ); // get Z column of objectMatrix
        v.y = 0;

        v.multiplyScalar( -distance );

        panOffset.add( v );
    };

}();

我将x和y分量设置为0。

相关的是,似乎同样的问题,我找到了对我有效的解决方案,谢谢!相关的是,这似乎是同样的问题,我已经找到了对我有效的解决方案,无论如何,谢谢!闭包的目的是避免实例化必须进行垃圾收集的新
Vector3
实例。每个调用创建两个实例。现在,
v
应该标准化为单位长度,因为它是一个方向。使用我上面链接的答案中的数学来获得一致的结果。闭包的目的是避免实例化必须进行垃圾收集的新
Vector3
实例。每个调用创建两个实例。现在,
v
应该标准化为单位长度,因为它是一个方向。使用我上面链接的答案中的数学来获得一致的结果。