XNAに飛行シミュレータプログラム(Star Fox 64に似ています)を書いていますが、私の回転に問題があります。私の考えは、位置の速度とベクトルのベクトルを持つことです。私が許可しているコントロールは、オイラーの角度が問題を引き起こすようにするので、私はクォータニオンを使いたいと思っています。XNA Quaternion.createFromAxisAngle
私はグラフィックスレンダリングに精通していませんが、Quaternion.createFromAxisAngle(ベクタ、ロール)(ベロシティベクタの周りを回転しているロール)を使用できますが、正しく動作していないと思います。基本的にピッチやヨーを回転しようとすると、何も起こりません。私が転がすとき、それはうまくいくが、私が期待した通りではない。これはcreateFromAxisAngleメソッドの適切な使用ですか?ありがとう。ここで
は私の船の更新位置コードです:
public override void UpdatePositions()
{
float sinRoll = (float)Math.Sin(roll);
float cosRoll = (float)Math.Cos(roll);
float sinPitch = (float)Math.Sin(pitch);
float cosPitch = (float)Math.Cos(pitch);
float sinYaw = (float)Math.Sin(yaw);
float cosYaw = (float)Math.Cos(yaw);
m_Velocity.X = (sinRoll * sinPitch - sinRoll * sinYaw * cosPitch - sinYaw * cosPitch);
m_Velocity.Y = sinPitch * cosRoll;
m_Velocity.Z = (sinRoll * sinPitch + sinRoll * cosYaw * cosPitch + cosYaw * cosPitch);
if (m_Velocity.X == 0 && m_Velocity.Y == 0 && m_Velocity.Z == 0)
m_Velocity = new Vector3(0f,0f,1f);
m_Rotation = new Vector3((float)pitch, (float)yaw, (float)roll);
m_Velocity.Normalize();
//m_QRotation = Quaternion.CreateFromYawPitchRoll((float)yaw,(float)pitch,(float)roll); This line works for the most part but doesn't allow you to pitch up correctly while banking.
m_QRotation = Quaternion.CreateFromAxisAngle(m_Velocity,(float)roll);
m_Velocity = Vector3.Multiply(m_Velocity, shipSpeed);
m_Position += m_Velocity;
}
ありがとうSeb、それは私のブログです! =)私はそれをある日書きましたが、どれだけ多くの人が役に立つと思っているのか驚いていました。 thattolleyguyの質問に対する私の答えは、ブログの本質のミニバージョンでした。 –