2012-05-13 9 views
8

Lo que trato de hacer es lanzar un rayo desde mi cámara. Conozco las coordenadas x, yyz de la cámara, así como su inclinación y guiñada. Necesito calcular su vector de dirección para poder pasarlo a mi algoritmo de trazado de rayos.Paso de la cámara/Guiñada al vector de dirección

El vector ascendente de la cámara es (0, 1, 0). "Pitch", desde la perspectiva de la cámara, mira hacia arriba y hacia abajo.

(yo preferiría no utilizar matrices, pero lo haré si tengo que hacerlo)

+0

¿Por qué la objeción a las matrices? Esa parece ser la forma más lógica de hacerlo por mí. Demasiado confuso, demasiado caro? Si no haces matrices, tendrás que idearlo usando mucha trigonometría, que terminará haciendo lo mismo. – Tim

Respuesta

10

Suponiendo que el sistema de coordenadas está configurado de tal manera que se cumplan las siguientes condiciones:

(pitch, yaw) -> (x, y, z) 
(0,  0) -> (1, 0, 0) 
(pi/2, 0) -> (0, 1, 0) 
(0, -pi/2) -> (0, 0, 1) 

Esta voluntad calcular (x, y, z):

xzLen = cos(pitch) 
x = xzLen * cos(yaw) 
y = sin(pitch) 
z = xzLen * sin(-yaw) 
+0

Impresionante, esto me ayudó mucho: D – CyanPrime

+0

@Neil Forrester, ¿qué dosis significa xzlen? ¿Dónde puedo encontrar la derivación matemática de la fórmula? – wangdq

+0

'xzLen' es la longitud del vector unitario en la dirección deseada después de proyectarla en el plano que contiene los ejes x y z. La fórmula se sigue directamente de las definiciones de sin() y cos(). –

Cuestiones relacionadas