OMBRE PORTÉE ET UTILISATION STENCIL SOUS OPENGL

shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014 - 18 janv. 2005 à 10:39
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 27 janv. 2005 à 22:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28920-ombre-portee-et-utilisation-stencil-sous-opengl

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
27 janv. 2005 à 22:44
ouah ca a l'air pas mal et bien expliqué...
dommage pour le fps cette technique ;)
mais pas pour nous...c'est jouli tout plein.
mais c'est surtout hardcore a coder comme bidule...

merci pour l'adresse de nvidia, je crois que je vais aller faire un tour la bas...
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
26 janv. 2005 à 10:36
Pas grave pour les fautes de frappae, c'est lisible et c'est pas du sms ^__^

le brouillard volumétrique c'est encore autre chose que les ombres volumétriques, en gros une ombre volumétrique c'est une extrusion par rapport à la lumière de la silhouette de l'objet calculée par rapport à la lumière aussi
un document pdf (1,2 mo) explique cela relativement bien : http://developer.nvidia.com/attach/6774

en ce qui concerne les listes et/ou les vertex array elles peuvent toutes deux êtres utilisées dans les 2 cas (ombre plane et ombre volumétrique)
à savoir que pour travailler une ombre volumétrique un objet doit être impérativement fermé, cela m'a posé pas mal de problèmes, en gros un objet est composé de triangles donc 3 côtés donc chaque triangle peut avoir 3 voisins alors un objet fermé est un objet dont chaque triangle a 3 voisins (pas plus pas moins) sinon ca provoque des bugs

j'ai fait un prog qui fait des ombres volumétriques mais je sais pas si c'est une bonne idée de le poster tel quel, je voudrais le modifier un peu pour éclaircir le code mais pas beaucoup de temps en ce moment
le plus contraignant c'est réellement au niveau des objets
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
25 janv. 2005 à 23:12
c'était Funto66, le grand amoureux des vertex array
;)
(bah moi je peux parler c'est pareil avec les listes...)
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
25 janv. 2005 à 23:00
Un vertex array comme une liste d'affichage, je pense qu'on doit pouvoir utiliser le stencil sur les 2 non?
Une liste, c'est juste des commandes mises en mémoire, et les vertex arrays juste des coordonnées; après les calculs stencil, Z-test...etc sont refais au runtime je pense...
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
25 janv. 2005 à 22:49
ouah j'aurai du me relire.. des fautes de frappe a la pelle...
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
25 janv. 2005 à 22:46
ouiouioui je sais comment ca mr*arche le stencil.. et la premiere chose que j'ai regdé la premiere fois que j'ai vu ce terme, c'est sa signification dans un dico....
Tes explications longues et tres détaillées (on en trouve rarement de comme ca) je l'apprécie bcp, mais surtout pour les autres, j'ai suffisament lu sur le sujet pour savoir tout ca, seulment j'ai jamais vraiement mis en oeuvre donc je connais pas tout a fait les noms de fonctions...

je me demande si une liste d'affichage peut prendre de tels parametrtes en compte? bon un vertex array fo pas y compter, mais une liste warum nicht.. a voir.

par contre, ombres volumétriques tu m'apprends qqch....jamais entendu parler... et le tut de digiben sur le brouillard volumétrique G jamais pris le tps de le lire, ca me sert pas...
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
25 janv. 2005 à 14:50
Merci pour vos commentaires et pour répondre à Arnaud16022 :
- le modèle de voiture je l'ai trouvé par hasard, mais si tu cherches "dosch 3D" sur un p2p tu devrais en trouver d'autres
- un peu d'explication sur la génération de l'ombre et sur l'utilité du stencil buffer : On dessine d'abord une fois la scène complète sans l'ombre, la skybox, le sol et la voiture
à la fin de "MainLoop.cpp" se trouve une fonction qui va créer une matrice à partir de l'équation du plan et les coordonnées de la lumière, cette matrice est chargée via glPushMatrixf dans le pipeline OpenGL et va affecter tous les polygones qui vont ensuite être transmis.
Ensuite le stencil est initialisé à 0 et l'affichage désactivé, on dessine l'objet (grace à la matrice tous les polygones de l'objet seront projetés à plat sur le plan passé en paramètre) uniquement dans le stencil et chaque fois qu'un pixel du stencil est modifié il est mis à 1. Le stencil va donc se retrouver avec des pixels à 0 et des pixels à 1 après le dessin.
A ce moment là on a créé un "pochoir" comme quand vous évidez une feuille de papier pour dessin un truc sur une vitre (style à noel des sapins ou autre ^__^)
On réactive l'affichage et on utilise le stencil en mode test et chaque fois qu'on a un pixel à 1 on autorise le dessin (donc partout où l'ombre s'est dessinée).
On dessine donc un grand polygone qui prend tout l'écran et qui ne va être dessiné que lorsque le stencil sera "d'accord" (à 1) comme sin on passait un coup de bombe dans le pochoir.

note: stencil en anglais se traduit par pochoir en français, c'est tout bête mais j'ai mis un certain temps à comprendre que le stencil était un buffer de la même résolution que l'affichage (une image en 800x600 = un stencil en 800x600) mais qui servait à effectuer des rendus "conditionnels"

Au final on a une ombre en ayant lancé l'affichage de la voiture 2 fois (c'est donc un rendu en plusieurs passes)

j'espère que mes explications sont assez claires et qu'elle vous seront utiles pour comprendre le fonctionnement.
ah oui, pour répondre à "si on calcule au début l'eq de chaque polygone, on devrait qd meme arriver a faire une ombre portée sur surface non plane" : oui c'est possible mais cela revient à calculer le "pochage" pour chaque polygone, c'est trop lourd mais c'est possible, il est préférable de faire des ombres volumétriques dans ce cas, un peu plus dur mais avec une bonne dose de prise de tête on y arrive ;p
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
24 janv. 2005 à 20:44
hum pas mal, le rendu est bon...
dommage que ce soit quasi-inutilisable: valable sur surfaces planes seulement !
2 questions :
ou as-tu trouvé ce modele de voiture?? suis intéressé...
je crois qu'il faut passer l'équation du plan au stencil buffer (indirectement du moins, avec glPlaneParams ou un truc comme ca), donc si on calcule au début l'eq de chaque polygone, on devrait qd meme arriver a faire une ombre portée sur surface non plane. me trompé-je?
merci.
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
19 janv. 2005 à 20:58
Très interessante ta source. J'ai essayé plusieurs fois de créer les ombres des objets mais j'ai pas reussi. Merci pour cette source!!!!!!!!
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
19 janv. 2005 à 19:10
Wééé cool ta source :)
Elle ne me servira pas tout de suite mais je sais qu'elle me servira (surtout pour les ombres) ^^
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
19 janv. 2005 à 09:22
Euh oui, désolé, elle est loin d'être exhaustive cette liste je voulais dire
cs_Urgo Messages postés 780 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 avril 2009 1
18 janv. 2005 à 19:32
"NON exhaustive" tu voulais dire...
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
18 janv. 2005 à 10:39
Une petite liste de liens exhaustive où j'ai trouvé des infos et bouts de code me permettant d'arriver à créer ce programme (et que je conseille donc)
http://nehe.gamedev.net/
http://www.gametutorials.com/
http://www.paulsprojects.net/
http://developer.nvidia.com/
http://www.ati.com/developer/index.html
et d'autres que j'oublie ... désolé

bien sûr cppfrance m'a apporté beaucoup et je suis content de voir que cette communauté perdure et s'enrichit

bonne continuation à tous
Shenron
Rejoignez-nous