我有用C#編寫的四元數相機(無恥地從在線教程中獲取)。我試圖在攝像機「面向」的方向上將攝像機在世界空間中的位置(表示爲Vector3)進行轉換。但是,我希望相機在Y軸上保持固定的高度(假設相機永遠不會「顛倒」,因爲相機可能不會垂直向上或向下看Y軸)。簡而言之,我希望相機的行爲方式類似於RTS遊戲中的相機,例如命令&征服。向前推動應該使你「向上」地圖,並保持在地形以上的恆定高度。我在下面給出的天真嘗試是不夠的,因爲相機的速度取決於相機俯視世界的角度。翻譯固定高度的四元數相機
var Y = mPosition.Y;
mPosition += mInverseViewMatrix.Backward * amount;
mPosition.Y = Y;
在上面,mPosition是一個表示世界位置的Vector3。 mInverseViewMatrix是視圖矩陣的逆。
我正在使用XNA和C#,但任何關於四元數和矢量操縱的一般建議可能都會有用。
我用你的第二個建議,它工作的一種享受。它看起來像是一個間接的解決方案,但我肯定會採取一個不正確的解決方案。謝謝。 – Necrototem 2011-04-01 09:50:18
我回想起來,我剛剛意識到,這種轉換在圍繞Y軸旋轉時看起來並不穩定。也許我錯了,任何指針? var orient = new Quaternion(new Vector3(0,mOrientation.Y,mOrientation.Z),mOrientation.W); orient.Normalize(); var vect = Vector3.Transform(Vector3.UnitX,Matrix.CreateFromQuaternion(orient)); // Vector3.UnitX * Matrix.CreateFromQuaternion(orient); mPosition + = vect * amount; – Necrototem 2011-04-01 10:03:12
糟糕。是的,你還需要將** z **清零,只剩下w和x。 – JCooper 2011-04-01 15:34:04