2009-10-15 21 views
5

Necesito obtener un vector ascendente para una cámara (para obtener el aspecto correcto) desde un ángulo de balanceo, inclinación y guiñada (en grados). He estado probando cosas diferentes durante un par de horas y no he tenido suerte :(. Cualquier ayuda aquí sería apreciada!¿Cómo obtener el vector de la cámara desde el balanceo, cabeceo y guiñada?

+0

Dado que lo etiquetó con todas las bibliotecas gráficas más importantes, supongo que es seguro asumir que quiere decir cómo hacerlo en general. –

+0

Yep Blaenk que es correcto ... Solo necesitaba ayuda con las matemáticas: D – Polaris878

Respuesta

5

Roll, Pitch y Yaw definen una rotación en 3 ejes. Desde estos ángulos puedes construir un 3x3 matriz de transformación que expresa esta rotación (see here how)
Después de que tenga esta matriz, tome su vector ascendente regular, digamos (0,1,0) si 'arriba' es el eje Y y multiplíquelo con la matriz. se obtiene es el vector transformado hasta

Editar -.
la aplicación de la transformación a (0,1,0) es lo mismo que tomar la fila del medio los 3 filas de la MAK matriz. e arriba de una base ortogonal del sistema girado. Eso sí, una API gráfica en 3D usa matrices 4x4. Así que para hacer una matriz de 4x4 saliendo de la matriz de rotación de 3x3 es necesario agregar un '1' en M [3] [3] (la esquina) y ceros en el resto de este modo:

r r r 0 
r r r 0 
r r r 0 
0 0 0 1 
+0

Shoosh, ¿y si no aplico la transformación al (0,1,0)? ¿Puedo sacar una de las filas/columnas de la matriz de rotación como mi arriba? Gracias – Polaris878

+0

Sí, en lugar de hacer la transformación de matriz de vectores, puede simplificar la ecuación al omitir las sumas cero/términos. Además, los vectores pueden ser column-major o row-major. Asegúrese de extraer el eje correctamente. –

1

Esto no puede responda directamente su pregunta, aunque puede ayudar. Tengo un proyecto de código abierto para XNA que crea un terminal de depuración que se superpone a tu juego mientras se ejecuta. Puede usar esto para buscar valores, invocar métodos o lo que sea. Entonces, si tienes una matriz de transformación y quieres extraer varias partes mientras el juego se está ejecutando, puedes hacerlo. El proyecto se puede encontrar aquí: http://www.protohacks.net/xna_debug_terminal

No tengo mucha experiencia en el tipo de matemática que está utilizando, pero espero que la publicación de Shoosh ayude en eso. Tal vez la terminal de depuración puede ayudarlo al probar su idea o en cualquier otro problema futuro que encuentre.

+0

ja, no puedo esperar a jugar con esto más tarde. Parece una herramienta que he querido por un tiempo ... He tenido que escribir una consola en mis proyectos y sacar datos allí ... muy, muy torpe. –

Cuestiones relacionadas