Glm::lookat() et angles up/at
Résolu
ElementW
Messages postés
5690
Statut
Contributeur
-
ElementW Messages postés 5690 Statut Contributeur -
ElementW Messages postés 5690 Statut Contributeur -
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
Pas de problème pour le vecteur at, vu que ma classe
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
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
Camerase 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::lookatpour 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
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:
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...
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...