3

私は XNA で 3D コーディングを始めたばかりで、いくつかのことに頭を悩ませようとしています。

XNA での私の目標は、宇宙シミュレーション ゲーム (オリジナル、私は知っています) を作成することです。船。私は 2D でのステアリング動作にある程度の価値をもたらしましたが、3D ではそうではありませんでした。

私の質問は:

ある場所を「探す」ために船を移動させようとしている場合、この移動は船のワールド マトリックスにどのような影響を与えますか? 私は vector3s を使用しており、加速度を速度に追加してから、速度を位置に追加しています。これは正しいアプローチですか?

今すぐ投稿する必要はありません。投稿する必要はありません。どのようなアプローチを取るべきかを理解しようとしているだけです。

ありがとう

4

1 に答える 1

4

オブジェクト/エンティティ/船に位置 (Vector3) と回転 (Matrix) を指定すると、次のコード (およびこの回答の下部にあるサンプル) を使用して船を動かすことができます。

たとえば、船を 5 単位前進させるには:

Entity myShip = new Entity();
myShip.GoForward(5.0f);

船のバレルを 90 度回転させるには

myShip.Roll(MathHelper.PiOver2);

そして、ここにサンプルコードがあります

public class Entity
{
    Vector3 position = Vector3.Zero;
    Matrix rotation = Matrix.Identity;

    public void Yaw(float amount)
    {
       rotation *= Matrix.CreateFromAxisAngle(rotation.Up, amount);
    }

    public void YawAroundWorldUp(float amount)
    {
       rotation *= Matrix.CreateRotationY(amount);
    }

    public void Pitch(float amount)
    {
       rotation *= Matrix.CreateFromAxisAngle(rotation.Right, amount);
    }

    public void Roll(float amount)
    {
       rotation *= Matrix.CreateFromAxisAngle(rotation.Forward, amount);
    }

    public void Strafe(float amount)
    {
       position += rotation.Right * amount;
    }

    public void GoForward(float amount)
    {
       position += rotation.Forward * amount;
    }

    public void Jump(float amount)
    {
       position += rotation.Up * amount;
    }

    public void Rise(float amount)
    {
       position += Vector3.Up * amount;
    }
}
于 2012-01-19T00:47:12.357 に答える