Ich programmiere ein Spiel in C# die XNA3.1-Engine. Jedoch habe ich ein kleines Problem mit meiner Kamera habe, im Grunde meine Kamera „Flip“ neigt, wenn es mehr als 180 Grad auf seiner Rolle dreht (wenn die Kamera 180 Grad erreicht, so scheint es, wieder auf 0 Grad zu drehen). Der Code für die Ansichtsmatrix zu erhalten, ist wie folgt:Kamera Flip Problem
Globals.g_GameProcessingInfo.camera.viewMat = Matrix.CreateLookAt(Globals.g_GameProcessingInfo.camera.target.pos, Globals.g_GameProcessingInfo.camera.LookAt, up); //Calculate the view matrix
Die Globals.g_GameProcessingInfo.camera.LookAt
Variable die Position 1 Einheit direkt vor der Kamera relativ zu der Drehung der Kamera, und die „up“ Variable wird mit dem erhaltenen folgende Funktion:
static Vector3 GetUp() //Get the up Vector of the camera
{
Vector3 up = Vector3.Zero;
Quaternion quat = Quaternion.Identity;
Quaternion.CreateFromYawPitchRoll(Globals.g_GameProcessingInfo.camera.target.rot.Y, Globals.g_GameProcessingInfo.camera.target.rot.X, Globals.g_GameProcessingInfo.camera.target.rot.Z, out quat);
up.X = 2 * quat.X * quat.Y - 2 * quat.W * quat.Z; //Set the up x-value based on the orientation of the camera
up.Y = 1 - 2 * quat.X * quat.Z - 2 * quat.Z * quat.Z; //Set the up y-value based on the orientation of the camera
up.Z = 2 * quat.Z * quat.Y + 2 * quat.W * quat.X; //Set the up z-value based on the orientation of the camera
return up; //Return the up Vector3
}
Nur um zu aktualisieren, habe ich die Funktion zur Transformation des Up-Vektors basierend auf der Kameradrehung durch die Verwendung der "Vector.Transform()" implementiert. Ich könnte dann aber das Problem verursachen, wenn der "up" Vektor gleich dem "look at" Vektor ist und deshalb umgedreht wurde (wie es das Problem in vorherigen Spielen war). Nach der Neucodierung der Funktion zur Aktualisierung der Blickposition neigt die Kamera immer noch dazu, im selben Bereich zu spiegeln, und es passiert nichts dramatisches mit der Drehung oder dem Blick auf die Variablen der Kamera. –
Versuchen Sie, die Frage zu bearbeiten, anstatt einen Kommentar zu Ihrer eigenen Frage hinzuzufügen, wenn Sie zusätzliche Informationen hinzufügen. Kommentare sind eine Methode, um die Antworten anderer oder die Kommentare anderer zu diskutieren oder zu kommentieren. – Manish