0
我嘗試串聯移動簡單模型時遇到問題。我有20個較小的模型附加到一個更大的模型。它基本上是一個有多個外部大炮的飛碟。我看過其他問題,如this one,看起來幾乎像我想要的。但是,這只是創建繪製翻譯。我實際上需要在三維空間中移動子模型,因爲它們可以獨立銷燬,因此需要碰撞檢測。下面是我如何旋轉父(在Update()函數):將子對象作爲父對象旋轉
angle += 0.15f;
RotationMatrix = Matrix.CreateRotationX(MathHelper.PiOver2) * Matrix.CreateRotationZ(MathHelper.ToRadians(angle) * MathHelper.PiOver2);
我已經嘗試了很多解決方案,但定位始終是關閉,所以他們不那麼看連接。這是我已經得到最接近:
cannons[x].RotationMatrix = Matrix.CreateRotationX(MathHelper.PiOver2) *
Matrix.CreateRotationZ(MathHelper.ToRadians(angle + cannons[x].angle) *
MathHelper.PiOver2);
cannons[x].position.X = (float)(Math.Cos(MathHelper.ToRadians(angle + cannons[x].originAngle) *
MathHelper.PiOver2) * 475) + position.X;
cannons[x].position.Y = (float)(Math.Sin(MathHelper.ToRadians(angle + cannons[x].originAngle) *
MathHelper.PiOver2) * 475) + position.Y;
我做了什麼錯誤的代碼?或者,如果我的方法完全關閉,那麼這樣做的正確方法是什麼?
我不知道我的理解。如果我使用這個,我是不是必須完全替換所有與位置相關的代碼? – Fibericon
子位置將與父空間相關,如果移動大模型並更新變換,則附加到父項的所有內容都將移動而不更改其翻譯,並且旋轉和縮放也相同,因此您無需製作針對您的大炮的引渡計算 – Blau
+1對於沒有三角函數的解決方案。歐拉角度非常不適合做3D數學運算。就個人而言,我會有一個單一的4x4矩陣,而不是單獨的縮放,旋轉和平移值。我發現四元數過大,在數學上比矩陣更抽象和更復雜。有沒有任何GPU可以在本地處理四元數?等待...... – Skizz