Bonsoir à tous,
Voilà, de nouveau avec un problème, c'est nouveau ça
Je commence tout juste le chapitre sur l'éclairage, et je bloque un peu sur le calcul de la normale. D'abord, si je comprends bien, la normale est tout simplement le vecteur qui est perpendiculaire à la surface et qui va indiquer comment la lumière doit "rebondir", c'est bien ça ? Par exemple si l'objet est plat, allongé, et que la normale est penché à 45°, les lumières se refleterait sur la droite (ok c'est pas très logique,...) ?
Bon ensuite pour le calcul de la normale, j'ai un peu plus de mal. Mon livre écrit :
A x B = (AyBz - AzBy, AzBx - AxBz, AxBy - AyBx)
La formule ne paraît pas compliquer, mais je ne suis pas sûr de la manière à comment je calcule mes vecteurs. Imaginons donc qu'on ait un triangle, comme ceci :
P1 = glVertex3f (0.0f, 0.0f, 0.0f);
P2 = glVertex3f (1.0f, 0.0f, 0.0f);
P3 = glVertex3f (0.0f, 1.0f, 0.0f);
Bref un triangle rectangle tout simple. Donc les deux vecteurs V1 et V2 sont,... V1 = P2 - P1 et V2 = P3 - P1. Toutefois le livre indique : "Remember that when taking the cross product, the order of the vectors matters". C'est à dire que des fois, il peut s'agir de V1 = P3 - P1 et V2 = P2 - P1. Dans quelle condition ce serait comme ça ?
Continuons les petits calculs ^^. Si je suis bien, il faut que je trouve les coordonnées des 2 vecteurs, soit :
P2 - P1 = (1.0 - 0.0, 0.0 - 0.0, 0.0 - 0.0) = (1.0, 0.0, 0.0)
P3 - P1 = (0.0 - 0.0, 1.0 - 0.0, 0.0 - 0.0) = (0.0, 1.0, 0.0)
Puis si on applique la formule du livre pour calculer la normale :
V1 x V2 = (0.0*0.0 - 0.0*1.0, 0.0*0.0 - 1.0*0.0, 1.0*1.0 - 0.0*0.0)
V1 x V2 = (-1.0, -1.0, 1.0)
Donc la normale pour ce triangle serait (-1.0, -1.0, 1.0) ? Ou je me trompe complètement ?
glBegin (GL_TRIANGLES);
glNormal3f (-1.0f, -1.0f, 1.0f);
glVertex3f (0.0f, 0.0f, 0.0f);
glVertex3f (1.0f, 0.0f, 0.0f);
glVertex3f (0.0f, 1.0f, 0.0f);
glEnd ();
Ici la normale est donc unique ? Il ne peut pas y avoir d'autres possibilités pour CE triangle là ? D'autre part, si on applique une rotation au triangle, il faudra également modifier la normale ?
Merci![]()
PS : désolé pour tous ces topics ^^.
Partager