Three.js - 是否有一种简单的方法来改变Object3D的旋转轴?

时间:2016-03-15 12:48:25

标签: javascript three.js

是否有一种简单的方法可以更改THREE.Object3D的旋转轴? 默认点是Object3d的位置点。

我有对象的组(实现为THREE.Object3D),我希望将所有对象一起旋转,可以在运行时更改THREE.Vector3点。

注意:组的位置无法更改。

我尝试了这个(使用 Derte Trdelnik 帮助),但它不起作用:

someButton.onClick(function () {

    var object = editor.selected;
    if (!object instanceof THREE.Object3D) return;

    var pivot = new THREE.Vector3(100, 0, 0);
    var vectorToPivot = object.position.sub(pivot);
    var moveToPivot = new THREE.Matrix4().makeTranslation(vectorToPivot.x,
                                                          vectorToPivot.y, vectorToPivot.z);
    var rotation = new THREE.Matrix4().makeRotationZ(Math.PI);
    var inverseMove = new THREE.Matrix4().makeTranslation(-vectorToPivot.x,-vectorToPivot.y, -vectorToPivot.z);

    var matrix = inverseMove.clone().multiply(rotation).multiply(moveToPivot);
    object.applyMatrix(matrix);

    editor.signals.objectChanged.dispatch(object);

});

提前致谢!

1 个答案:

答案 0 :(得分:0)

你不必改变位置,只需创建一个符合你想要的矩阵:

var vectorToPivot = object.position.sub(pivot);
var moveToPivot = new THREE.Matrix4().makeTranslation(vectorToPivot.x, 
                                                      vectorToPivot.y,vectorToPivot.z);
var rotation = new THREE.Matrix().makeRotationX(Math.PI/2);
var inverseMove = new THREE.Matrix().makeTranslation(-vectorToPivot.x,
                                                     -vectorToPivot.y,-vectorToPivot.z);

var matrix = inverseMove.clone().multiply(rotation).multiply(moveToPivot);
object.applyMatrix(matrix);