Merci pour ta réponse.
Le lancement du vertex shader est lancé par glVertex ou gl_Normal il me semble? Donc pas au même moment, et j'ai l'impression que mon vertex ne contiendra pas la normale.
Est-ce d'ailleur possible, puisque la normale est celle de la face, donc de 3 vertex. Dans le pixel shader ça me poserait moins de problème de compréhension.
Zeph Le 06/12/2010 à 10:52 Par "lancé" tu veux dire exécuté ? Parceque la procédure qui appelle ton vertex shader et ton pixel shader n'est lancée qu'une seule fois pour tout le rendu, donc après tous tes appels à glVertex et glNormal. La seule contrainte est d'avoir appelé autant de fois glVertex que glNormal (enfin je suppose, je n'ai jamais utilisé cette technique) et tu pourras automatiquement accéder dans ton vertex shader à la normale correspondant à chaque vertex.
Théoriquement, la notion de vecteur normal est associé à une face, mais en pratique ça provoquerait des rendus assez moches (imagine un sol constitué de petits carrés avec des orientations différentes, chaque carré aurait un éclairage uniforme et différent de son voisin à côté, à cause de son orientation, ça serait pas terrible). Du coup on calcule plutôt un vecteur normal par vertex (si le vertex est partagé entre plusieurs faces, ça sera la "moyenne" des normales de chacune de ces faces, c'est à dire la somme normalisée de chaque normale), ce qui permet d'interpoler linéairement la normale en chaque point de ta surface.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
La normale est celle de la surface, mais la normale peut avoir une différente en chaque point de la surface. Il ne faut simplement pas penser surface = face = triangle, car le triangle n'est que la manière de représenter (approximer la plupart du temps) la vraie surface. (face = triangle c'était au temps du flat shading, mais de nos jours ça n'a plus vraiment de sens, en dehors des objets cubiques ^^)
Un cube par exemple, c'est six surfaces planes que tu approximes à chaque fois par au moins deux triangles droits. Et qui dit plan dit vecteur normal constant.
Mais une sphère, c'est une seule surface, sphérique, que tu approxime par plein de petites faces triangulaires. Mais le vecteur normal n'est pas constant. (C'est en gros le "vecteur rayon vers le point" normalisé)
En plus, les points ne peuvent pas être réutilisés entre plusieurs faces planes. Par exemple, avec les normales, un cube ce n'est pas seulement 8 points, mais c'est 6*4=24 points.
Zeph Le 06/12/2010 à 15:59 Je crois que tu es un peu en avance par rapport au topic, mais ça reste un lien intéressant ^^

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Je vais modifier ma classe VBO pour ajouter les normales avec glNormal.
Si je comprend bien, je peux même appeler glNormal lors de la construction des triangles, quand je fais " mVertices[id] = point1; " puisque le shader est appelé à la fin. Par contre ce sera moins propre et moins rapide que d'envoyer un normalbuffer, mais pour le moment c'est pour tester.
J'avais peu peur que ça ne serve à rien, car je pensais que le pixel shader était appelé par glVertex. (et donc aussi souvent)
Du coup, ça devrait donc se faire quasi tout seul.
Merci pour vos réponses.