Glm::lookat() et angles up/at

Résolu/Fermé
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - Modifié par gravgun le 13/02/2015 à 22:01
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 14 févr. 2015 à 10:23
Bonjour,
pour un jeu (que je mettrais un jour peut-être sur le net, sources incluses), j'utilise les librairies glm et OpenAL.
Sauf que je suis un peu une bille en calcul de coordonnées dans l'espace...
Voyez-vous, dans une méthode
Audio::updateAngle()
, j'indique a OpenAL le changement d'angle de la caméra, et la dite librairie utilise la convention des 2 vecteurs up et at.
Pas de problème pour le vecteur at, vu que ma classe
Camera
se dirige et se calcule selon un point à viser
lookat
, n'ayant pas (encore?) l'utilité de tourner la caméra sur l'axe du regard (Z) ; ce qui fait que le vecteur up que je fournis à
glm::lookat
pour le calcul de matrice de vue est toujours le même:
(0, 1, 0)
.
Toutefois je coince sur le calcul du vecteur up de la caméra après le lookat, je présume que quelque part j'aurais a me servir de produits vectoriels, mais je ne vois pas comment m'en servir...

Des idées?
from human import idiocy
del idiocy

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
14 févr. 2015 à 10:23
Après un peu plus de recherches fructueuses (utilisation de "forward vector" au lieu de "at vector"),
on peut calculer le vecteur up comme ceci:
glm::normalize(glm::cross(glm::cross(lookAt, upVec), lookAt));

On peut aussi le calculer depuis la matrice de projection, avec les 3 premiers coefficients de la 2e ligne.
M'enfin ça marche maintenant!
Surtout qu'avant j'avais inversé le vecteur up et at lors du passage des paramètres a OpenAL, ce qui explique pourquoi le son se déplaçait de gauche a droite si je levais la tête dans le leu...
0