4

だから私はこれを機能させようとしてきましたが、今のところうまくいきません。うまくいけば助けてくれます。私のプロジェクトには、ユーザーがマウスとボタンで自由に移動できるカメラがあります。現在は次のようになっています: move = new Vector3(0, 0, -1) * moveSpeed; move = new Vector3(0, 0, 1) * moveSpeed; ... そして、移動ベクトルを cameraPos ベクトルに追加するだけです: cameraPos += move

次に問題は、カメラを回転させてから、たとえば下に移動しようとすると、まっすぐ下に移動するのではなく、特定の角度で移動することです。これは、ローカル軸上を移動するためであると想定しています。しかし、私がやりたいことは、世界軸で動くことです。そのようなことは可能ですか、それとも何らかの方法で角度を計算してから、複数の軸を移動する必要がありますか?

よろしくお願いします!

EDIT:カメラ cameraPos の現在の位置であり、カメラ rotation の現在の回転であるカメラを回転させています。そして、これはカメラを回転させるコードです:

void Update()
{
    ...
    if(pressed)
    {
        int newY = currentY - oldY;
        pitch -= rotSpeed * newY;
    }
    Rotate();
}

void Rotate()
{
    rotation = Matrix.CreateRotationX(pitch);
    Vector3 transformedReference = Vector3.Transform(cameraPos, rotation);
    Vector3 lookAt = cameraPos + transformedReference;
    view = Matrix.CreateLookAt(cameraPos, lookAt, Vector3.Up);

    oldY = currentY;
}

これがもっと読みやすいことを願っています。

4

2 に答える 2

2

以下を使用して、この問題を解決できました。

Vector3 v;
if (state.IsKeyDown(Keys.Up))
   v = new Vector3(0, 0, 1) * moveSpeed;
... //Other code for moving down,left,right

if (state.IsKeyDown(Keys.V))
    view *= Matrix.CreateRotationX(MathHelper.ToRadians(-5f) * rotSpeed); //Multiplying view Matrix to create rotation

view *= Matrix.CreateTranslation(v); //Multiplying view Matrix to create movement by Vector3 v
于 2012-11-10T08:47:15.473 に答える
0

見ている方向を既に に保存していると思いますVector3。メソッドを次のように置き換えます。

direction.Normalize();
var move = direction * moveSpeed;
cameraPos += move;
于 2012-11-07T18:13:10.187 に答える