2010-08-06 4 views
3

Je dois créer un vecteur ascendant lorsque la caméra regarde n'importe quel angle (sauf directement vers le bas ou vers le haut car le vecteur ascendant serait perpendiculaire à l'axe y).Moyen efficace de calculer le vecteur ascendant pour gluLookAt qui pointe le plus l'axe y?

Le vecteur ascendant doit être perpendiculaire à la ligne de visée du parcours. Lorsque la ligne de visée n'est pas le long de l'axe des ordonnées, vous pouvez imaginer un cercle autour de l'œil et la ligne de visée où le vecteur haut pourrait être. Sur ce cercle, il y aura un point qui ira plus haut sur l'axe des ordonnées que n'importe quel autre point. C'est ce que je veux que mon up-vector soit.

Je suis sûr que je peux élaborer une solution, mais je suppose que les gens l'auraient fait beaucoup de fois auparavant et je veux avoir la solution la plus efficace. Mon appareil photo, lorsque vous l'utilisez au moins, ne regarde pas directement vers le bas ou vers le haut sur l'axe des y, donc il n'y a pas de problème là-bas.

Répondre

3

gluLookAt ne nécessite pas que le vecteur ascendant que vous fournissez soit perpendiculaire à la direction que vous recherchez. Donc, vous pouvez simplement utiliser 0,1,0.

Si vous avez vraiment, vraiment envie de venir avec un vecteur perpendiculaire, jetez un oeil à the man page for gluLookAt et faire ce qu'ils font pour faire u

+0

Je pensais que cela causait des problèmes avec la perspective n'est-ce pas? Cela ne fait aucune différence? Merci beaucoup pour la réponse. –

+0

Encore une fois, si vous regardez la page de manuel gluLookAt, ils vous disent exactement ce qu'ils font. Ils perpendiculisent le vecteur ascendant que vous fournissez, comme le décrit lisarc. (Et, en passant, si vous êtes reconnaissant, vous pouvez voter pour vos répondeurs, et accepter l'un d'entre eux.) –

+0

Il n'a pas dit cela sur la documentation que j'ai regardée. J'ai vu de nombreuses pages disant que le vecteur haut doit être perpendiculaire mais merci de l'avoir éclairci. Je sais comment accepter une réponse, oui. J'espérais une réponse avant d'accepter la vôtre. –

14

La plupart des jeux commerciaux utilisent le produit croisé pour générer une perpendiculaire .

  • Normaliser votre vecteur de look. Prenez le produit croisé de votre vecteur de regard et un vecteur de 0,1,0. Cela vous donne votre bon vecteur. Prenez le produit croisé de votre vecteur droit et votre vecteur de look. Ceci est votre nouveau vecteur, qui est une perpendiculaire à votre vecteur look original.

+3

Merci pour la réponse. Je vais utiliser votre suggestion à moins qu'il s'avère que je n'ai pas besoin d'un vecteur perpendiculaire. –

Questions connexes