2012-05-13 21 views
8

Quello che sto cercando di fare è trasmettere un raggio dalla mia macchina fotografica. Conosco le coordinate x, yez della videocamera, nonché la sua altezza e imbardata. Ho bisogno di calcolare il suo vettore di direzione in modo che possa passarlo al mio algoritmo di raytracing.Camera Pitch/Yaw to Direction Vector

Il vettore in alto della videocamera è (0, 1, 0). "Pitch", dal punto di vista della telecamera, sta guardando su e giù.

(io preferirei non usare matrici, ma lo farò se devo)

+0

Perché l'obiezione alle matrici? Sembra il modo più logico per farlo per me. Troppo confuso, troppo costoso? Se non si eseguono matrici, è sufficiente studiarla usando un sacco di trigonometria, che finirà praticamente per fare la stessa cosa. – Tim

risposta

10

Supponendo che il sistema di coordinate viene impostato in modo tale che le seguenti condizioni:

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

Questa volontà calcolare (x, y, z):

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

Impressionante, questo mi ha aiutato molto: D – CyanPrime

+0

@Neil Forrester, che dose xzlen significa? dove posso trovare la derivazione matematica della formula? – wangdq

+0

'xzLen' è la lunghezza del vettore unità nella direzione desiderata dopo averla proiettata nel piano contenente gli assi x e z. La formula segue direttamente dalle definizioni di sin() e cos(). –