2015-10-23 44 views
1

我認爲像很多新手,我奮力把握四元數的應用,特別是如何手動操縱它們...修改四元數,同時更新

我有一個mecanim模型(即基本姿勢的數組)所以每一幀,我需要更新我的模型與最新的姿勢,所以它看起來生活

我用23根mecanim骨頭,所以有映射我的模型的骨骼到Unity的mecanim系統,我想對待不同,通過使它變成在相反的方向是什麼運動數據使然,或什麼:東西顯示頭部移動的方式不同。

for (int i = 0; i < 23; i++) 
{ 
    switch (i) 
    {      
     case (int)AnimationSegment.Head: 
      model[i].rotation = pose[i].rotation; // Let's turn the head... 
      break; 

     default: 
      model[i].rotation = pose[i].rotation; 
      break; 
    } 
} 

我怎麼才能乘以(一對註釋行)pose[i].rotation,例如,旋轉頭45度,比它如何會更?

下面是我自己的不成功的嘗試(其希望展示我是如何誤解了四元數,所以我希望得到任何幫助):

Quaternion q = Quaternion.Euler(new Vector3(-x, y, z)); 

在此之後,我改變了該行以將註釋:

model[i].rotation = pose[i].rotation * q; 
+1

您將需要一個void更新方法。請參閱http://docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html。至於實際的代碼,我也是Unity的初學者,但是嘗試一下你之前做過的事情,並將其作爲每幀更新方法更新中的任何代碼以無效更新方法實現。如果你想讓頭部與當前方向相反,那麼x和y方向的旋轉-1會簡單地乘以-1? –

回答

1

四元數可能有點複雜,即使在使用它們之後,我總是必須回到文檔並查找它們。如果你真的想了解所有的東西,以及如何將它們結合起來的作品,你可以看看一些東西,線性代數或...

避免問題

使用您現有的四元數的.eulerAngles功能拉出圍繞x,y和z軸的旋轉。然後你可以操縱這些,但是你想要的。比如像你說的關於旋轉的東西45度以上

Vector3 existingAngles = model[i].rotation.eulerAngles; 
Vector3 newAngles = new Vector3(existingAngles.x, existingAngles.y, existingAngles.z + 45); 
model[i].rotation.eulerAngles = newAngles; 

請記住,你總是可以從通常很難轉換再次4x4矩陣(四元),以歐拉角和回工作,我會建議你堅持操縱角度並重新分配簡單情況。