Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 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és229Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention20 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és1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 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és1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 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és1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 25 janv. 2005 à 22:49
ouah j'aurai du me relire.. des fautes de frappe a la pelle...
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 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és229Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention20 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és1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 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és509Date d'inscriptionsamedi 28 juin 2003StatutMembreDerniè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és1267Date d'inscriptionmercredi 1 janvier 2003StatutMembreDernière intervention28 février 20074 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és229Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention20 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és780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 18 janv. 2005 à 19:32
"NON exhaustive" tu voulais dire...
shenron666
Messages postés229Date d'inscriptiondimanche 14 septembre 2003StatutMembreDernière intervention20 août 2014 18 janv. 2005 à 10:39
27 janv. 2005 à 22:44
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...
26 janv. 2005 à 10:36
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
25 janv. 2005 à 23:12
;)
(bah moi je peux parler c'est pareil avec les listes...)
25 janv. 2005 à 23:00
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...
25 janv. 2005 à 22:49
25 janv. 2005 à 22:46
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...
25 janv. 2005 à 14:50
- 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
24 janv. 2005 à 20:44
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.
19 janv. 2005 à 20:58
19 janv. 2005 à 19:10
Elle ne me servira pas tout de suite mais je sais qu'elle me servira (surtout pour les ombres) ^^
19 janv. 2005 à 09:22
18 janv. 2005 à 19:32
18 janv. 2005 à 10:39
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