Estoy programando un juego en C# usando el motor XNA3.1. Sin embargo, tengo un pequeño problema con mi cámara, básicamente, mi cámara tiende a "voltearse" cuando gira más de 180 grados en su giro (cuando la cámara alcanza los 180 grados, parece voltearse a 0 grados). El código para la obtención de la matriz de vista es el siguiente:Problema al voltear la cámara
Globals.g_GameProcessingInfo.camera.viewMat = Matrix.CreateLookAt(Globals.g_GameProcessingInfo.camera.target.pos, Globals.g_GameProcessingInfo.camera.LookAt, up); //Calculate the view matrix
La variable Globals.g_GameProcessingInfo.camera.LookAt
la unidad de posición 1 directamente en frente de la cámara, con relación a la rotación de la cámara, y el "arriba" variable se obtiene con el siguiente función:
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
}
Solo para actualizar, implementé la función para transformar el vector ascendente basado en la rotación de la cámara mediante el uso de "Vector.Transform()". Entonces pensé que el problema podría estar causado cuando el vector "arriba" es igual al vector "mirar" y es por eso que se volteó (como ese ha sido el problema en juegos anteriores). Después de volver a codificar la función para actualizar la posición de observación, la cámara todavía tiende a voltearse en la misma área, y no hay nada dramático que ocurra con la rotación o mirar las variables de la cámara. –
Intenta editar la pregunta en lugar de agregar un comentario a tu pregunta al agregar información adicional. Los comentarios son un método aquí para discutir o comentar las respuestas de los demás o los comentarios de los demás. – Manish