だから私はこれを機能させようとしてきましたが、今のところうまくいきません。うまくいけば助けてくれます。私のプロジェクトには、ユーザーがマウスとボタンで自由に移動できるカメラがあります。現在は次のようになっています:
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;
}
これがもっと読みやすいことを願っています。