2016-03-15 35 views
0

有没有简单的方法来改变THREE.Object3D的旋转轴? 默认点是Object3d的位置点。Three.js - 有没有简单的方法来改变Object3D的旋转轴?

我有组(实现为THREE.Object3D)的对象,我想旋转所有对象在THREE.Vector3点左右,可以在运行时更改。

注意:组的位置不能改变。提前

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); 

}); 

感谢:

我曾经尝试这样做(与Derte Trdelnik帮助),但它不工作!

回答

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); 
+0

做你的意思是:在所有线路THREE.Matrix4?无论如何,它会导致组内对象的位置变化或组本身的位置。 – RoeePeleg

+0

请看我的问题编辑。 – RoeePeleg

+0

是的我打算使用矩阵,它确实改变了位置,我可能误解了你的问题 - 你不想在旋转之后改变位置?在这种情况下,使枢轴矢量[0,0,0],它将围绕中心旋转,或者如果由于某种原因,你有一个旋转矩阵你想使用 - 使用它并将组移回到其前中心 –

相关问题