這是事情。我有一個由6架飛機組成的Object3d組成一個立方體。現在,在基於鼠標輸入應用四元數旋轉後,立方體停止後 - 我需要立方體直接轉向相機的最近側(平面子)。我現在正在做的是獲取Object3d矩陣的當前歐拉角,將旋轉應用到該矩陣,並使用setFromRotationMatrix()函數將其設置回我的對象的四元數。有時候這種方法有效(通常在低角度),有時Z軸行爲錯誤(或者Y,或者甚至全部都不能分辨)。Three.js如何將Object3d的子點指向相機?
現在,我當然可以計算出最接近的一面,並將該面的直接四元數應用於我的對象,該對象可以工作,但這不會給我帶來任何動畫效果。
我使用此代碼來獲取我當前的角度:http://www.cs.princeton.edu/~gewang/projects/darth/stuff/quat_faq.html#Q37。根據我計算最接近90度的旋轉,每軸:
function lookAtCamDeg(val){
var d = 1;
var s = 1;
var newAngle;
if(val < 0)d*=-1;
val = Math.abs(val);
if(val <= 45)s*=-1;
if(val > 45)val=90-val;
newAngle = val*d*s;
return newAngle;
}
和應用,爲把我的立方體:
var angles = getAngles();http://www.cs.princeton.edu/~gewang/projects/darth/stuff/quat_faq.html#Q37
var newX = lookAtCamDeg(angles.x);
var newY = lookAtCamDeg(angles.y);
var newZ = lookAtCamDeg(angles.z);
var ma = cube.matrix;
ma = ma.rotateX(-newX*DEGREES)
ma = ma.rotateY(-newY*DEGREES)
ma = ma.rotateZ(-newZ*DEGREES)
cube.quaternion.setFromRotationMatrix(ma);
什麼我現在的想法是用我的立方體的單獨的平面嘗試(兒童)和基於他們的法線應用lookAt()方法,但不知道如何去做,因爲我需要旋轉整個對象,而不是一個孩子。有人能讓我走向正確的方向嗎?什麼是最好的方式來實現我的需求?
I以前從來沒有用過slerps,所以有點害怕:)))我找到的解決方案是計算兩個季度之間的差異,用公式TransQ = InitQ^-1 * FinQ,其中^ -1是「共軛()'功能。所以然後我創建一個新的矩陣,對它應用旋轉,最後用'setFromRotationMatrix()'將這個矩陣應用到我的對象的四捨五入中。最難的部分是瞭解如何確定這整個混亂。儘管感謝您的建議!) –