2010-09-23 3 views
0

J'ai besoin d'aide conceptuelle avec la fonction .... de Direct3D. Dans leur documentation officielle, disent-ils que le calcul qui a lieu peut se résumer avec ceci:Besoin d'aide avec la fonction LookAt de Direct 3D

Zaxis = normal (A - yeux) axeX = normal (croix (haut, Zaxis)) axeY = croix (zaxis, axeX)

xaxis.x yaxis.x zaxis.x 0 xaxis.y yaxis.y zaxis.y 0 xaxis.z yaxis.z zaxis.z 0 -dot (Xaxis, oeil) -dot (Yaxis , oeil) -dot (zaxis, oeil) l

Maintenant ce que je ne comprends pas est ce qui est fait avec la fonction 'normal()' utilisée dans les deux premières lignes? Comment puis-je calculer normalement avec deux vecteurs?! N'est-ce pas un normal calculé pour un avion?!

Dans la deuxième ligne, normale() travaille sur un seul vecteur (depuis que la Croix (vers le haut, zaxis) retournerait un vecteur 3D) ..

Donc, fondamentalement, je dois savoir ce qui signifie l'utilisation normale () dans les deux premières équations ..

je besoin de ceci pour la pratique de faire ce calcul manuellement sur mon ..

Répondre

0

fonction normale() normalise un vecteur.

Un vecteur a une manitude, de longueur. Ceci est défini comme:

length = sqrtf((x * x) + (y * y) + (z * z)); 

Donc, si vous avez un vecteur défini comme (10, 0, 0) qui vous donnera une longueur de

length = sqrtf((10 * 10) + (0 * 0) + (0 * 0)); 

qui est agréable calcul facile de retourner une longueur/magnitude 10.

maintenant un vecteur normal a une magnitude de 1. Ainsi, vous pouvez facilement voir ci-dessus qui en divisant chaque élément du vecteur par l'ampleur, vous finirez avec un rapport longueur/amplitude de 1.

Ainsi la fonction normale fait simplement:

const float length = sqrtf((vx*vx) + (vy*vy) + (vz*vz)); 
vx     = vx/length; 
vy     = vy/length; 
vz     = vz/length; 
Questions connexes