我一直在關注由朦朧心靈創建的XNA教程我有一個具有Position(Vector3)和Rotation(Quaternion)的基礎對象。對象模型看起來像這樣 旋轉塊的6邊
從本教程中的攝像頭實現,我所做的旋轉的副本,並旋轉方法並實現他們的目標
public virtual void Rotate(Vector3 axis, float angle)
{
axis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(axis, angle) * Rotation);
}
public virtual void Revolve(Vector3 target, Vector3 axis, float angle)
{
Vector3 revolveAxis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Quaternion rotate = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(revolveAxis, angle));
Position = Vector3.Transform(Position - target, Matrix.CreateFromQuaternion(rotate)) + target;
Rotate(axis, angle);
}
我的阻止對象創建6四實例,並調用render方法各四對象上,我分配在每四的偏移和旋轉而形成織構塊看起來像這樣:
而現在我們有實際的問題,呼籲旋轉在我的座OBJ ect導致對象本身改變旋轉,並且我的Quad對象不旋轉,因此我在Block對象上實現了一個新的旋轉函數。
public override void Rotate(Vector3 axis, float angle)
{
for (int i = 0; i < mySides.Length; i++)
{
Quad side = mySides[i];
side.Revolve(this.Position, axis, angle);
}
}
然而,這並沒有給我的預期結果如下所示:
錯誤的解決
下面的解決方案工作,但不會是非常通用的,將受到限制: 一堆if語句,用於檢查我想要旋轉的軸,然後以正確的方式旋轉每個邊(Quad對象)。
的妥善解決
我也可以做四的渲染對象取決於塊對象(其父)的旋轉,但我對如何做到這一點不確定。
第三個也是最後一個選項是讓Rotate方法將每個Quad對象的旋轉和位置更新爲正確的值,但我不確定如何操作。
問題
所以我要問的是這方面的一些意見或想法,也許一些鏈接和/或教程解釋如何在XNA使用四元數,優選以可視化的方式。
歡呼聲中,期待您的輸入:)