2013-10-15 248 views
1

我想旋轉圍繞世界軸的對象。我發現這樣一個問題:How to rotate a object on axis world three.js?圍繞世界軸旋轉對象

但它並沒有使用此功能解決問題:沒有定義

var rotWorldMatrix; 

// Rotate an object around an arbitrary axis in world space  
function rotateAroundWorldAxis(object, axis, radians) { 
    rotWorldMatrix = new THREE.Matrix4(); 
    rotWorldMatrix.makeRotationAxis(axis.normalize(), radians); 
    rotWorldMatrix.multiplySelf(object.matrix);  // pre-multiply 
    object.matrix = rotWorldMatrix; 
    object.rotation.getRotationFromMatrix(object.matrix, object.scale); 
} 

multiplySelfgetRotationFromMatrix(我得到一個控制檯錯誤)。如何解決這個問題?

更新

我試圖用Quaternion,但它似乎沒有正常運行。我想根據用戶點擊旋轉對象,這是我寫的函數:

function mouseUp(event) { 
    var x= event.clientX; 
    var y= event.clientY; 
    var dx= (x - xBegin); 
    var dy= (y - yBegin); 

    var quaternion= new THREE.Quaternion(); 
    quaternion.setFromAxisAngle(new THREE.Quaternion(dy,dx,0).normalize(),Math.sqrt(dx*dx+dy*dy)/250.0); 
    object.quaternion.multiplyQuaternions(quaternion,object.quaternion); 
} 

它只要正確旋轉的物體在垂直或水平位置,但如果它是例如與x軸成45度角,它會非常緩慢地旋轉,並且與咔嗒聲的方向相反。

回答

6

只要對象不具有旋轉的父母,你可以圍繞一個世界旋轉的對象,像這樣軸:

var q = new THREE.Quaternion(); // create once and reuse 

q.setFromAxisAngle(axis, angle); // axis must be normalized, angle in radians 
object.quaternion.premultiply(q); 

three.js所r.78

+0

謝謝你的回覆。你能看到我的編輯?我嘗試使用Quaternion同時圍繞x和y軸(根據用戶手勢)旋轉對象,但它不能正確旋轉對象。 –

+0

回答後請不要更改問題。我回答了你原來的問題。請接受這個答案,如果你還有其他問題,請發表一個新帖子......我希望你自己能夠找出問題 - 無論如何 - 你正在傳遞一個「四元數」,你應該傳遞一個' Vector3'。 – WestLangley