Salut, j'ai une fonction lookAt pour regarder à un endroit précis avec trois vecteurs, up pour regarder vers le haut, left le vecteur de gauche et forward le vecteur qui pointe devant la vue. J'ai eu un soucis lorsque le vecteur forward est égal ou opposé au vecteur up le crossProduct renvoyait le vecteur null, j'ai dû donc changer le code comme ceci :
Mais je ne sais pas trop ce que doit valoir les vecteurs left et up quand le vecteur up et forward sont identique (regarde en haut) ou opposés. (regarde en bas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void View::lookAt(float x, float y, float z) { target = math::Vec3f(x, y, z); forward = target - position; forward = forward.normalize(); if (forward == up) left = forward.cross(math::Vec3f(0, 0, -1)).normalize(); else if (forward == -up) left = forward.cross(math::Vec3f(0, 0, 1)).normalize(); else left = forward.cross(up); viewMatrix.setAxis(left, up, forward); viewUpdated = true; }
Merci.





Répondre avec citation





Partager