2016-03-15 121 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],它將圍繞中心旋轉,或者如果由於某種原因,你有一個旋轉矩陣你想使用 - 使用它並將組移回到其前中心 –

相關問題