-
phong et openGL
Bonjour,
J'aurais une question si possible, est ce possible d'implémanter l'ombrage de phong avec openGL.
j'ai cherché un peu, et j'ai trouvé un pdf ou il etait precisé qu'ilo n'était pas supporté 8O, je trouve ca louche(j'etais meme indigné)
En tout cas si c'est possible, j'aimerai bien que vous me redirigiez vers un tuto ou un document traitant de la question. surtout que pour le moment j'utilise gouraud, et ce n'est psa tres tres brillant à mon goût.
Merci beaucoup.
Je précise que dans mes scènes, il y a plein de polygones à tor et à travers
-
Utilise les shaders. Il y a plein de codes de shaders sur le net, surtout pour gouraud et phong.
Voila une adresse:
http://evasion.inrialpes.fr/Membres/Antoine.Bouthors/teaching/ensimag/Synthese%20d'images_Cours_1/
-
En fait on ne parle plus trop de "Phong", dans le rendu temps réel, mais plutot de per pixel lighting (éclairage par pixel) ce qui est plus général.
Le per pixel lighting peut se faire avec des shaders ou avec le fixed function pipeline (de manière plus limité certes).
L'idée derrière l'éclairage par pixel c'est que calculer l'éclairage uniquement aux sommets (vertex lighting) puis interpoler la couleur résultat va rater plein de détails comme tu as pu t'en rendre compte. Tout simplement parce que la fonction d'éclairage ne varie pas linéairement sur ta surface et que ton interpolation est par contre uniquement linéaire. En général ta fonction d'éclairage dépend de deux paramètres minimum (parfois plus !), le vecteur normal qui définit l'orientation de ta surface dans un repère donné et le vecteur d'éclairage qui va te donner la direction (et parfois l'intensité) de la source de lumière dans ton "champ lumineux".
A partir de cela de nombreuses simplifications (ou complexifications) existent. Dans le cas d'une lumière située à une large distance on peut considérer le vecteur lumière comme étant une constante dans l'espace de l'objet. Et il peut donc être passé comme un argument constant à ton shader. Dans certains cas (normal mapping ou objets animés), il n'est pas adéquat de traiter le vecteur normal comme étant dans l'espace de l'objet mais dans l'espace "tangentiel", c'est à dire dans un repère qui varie selon l'orientation de la surface. Dans ce cas on peut faire varier linéairement le vecteur lumière (avec une rénormalisation ou pas) dans l'espace tangentiel, et on a la possibilité d'extraire un facteur de perturbation de ton vecteur normal dans une "normal map".
Bonne chance !