begin process at 2012 05 27 18:59:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > OMBRE PORTÉE ET UTILISATION STENCIL SOUS OPENGL

OMBRE PORTÉE ET UTILISATION STENCIL SOUS OPENGL


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Initié Date de création :18/01/2005 Vu / téléchargé :8 059 / 707

Auteur : shenron666

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
C'est un "vieux" code que j'ai retrouvé, il date d'il y a presque 1 an et il est loin d'être au point, je n'ai pas eu le temps de le revoir et il ne doit pas comporter beaucoup de commentaires
J'ai tout de même recréé le projet pour qu'il compile (VS7) et pour résumer voici ce que vous pouvez trouver dans le code et ce que le programme fait :
- chargement de textures bmp et raw(brut)
- chargement d'objet wavefront (obj)
- gestion basique de la lumière
- affichage d'un objet
- skybox
- génération d'une ombre portée plane
- utilisation du stencil pour supprimer les défaut de l'ombre

je dois en oublier mais si vous avez le courage allez voir ;-p
je fourni le code "as is" ou tel quel si vous préférez, peu de chances pour que j'apporte une correction mais je peux tout de même répondre aux questions
encore une fois, bon courage ^_^



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CLASSE DE GESTION DE FICHIER DE TYPE INI (CHARGEMENT/SAUVEGA...
CSORTEDARRAY<TEMPLATE> VISUAL C++ MFC
Source avec Zip Source avec une capture EXTRACTEUR / ANALYSEUR DE COMBOS (MFC)
Source avec Zip Source avec une capture OMBRES VOLUMÉTRIQUES D'OBJETS 3D EN UTILISANT LE STENCIL (C+...
Source avec Zip Source avec une capture VIEWER 3D ET GÉNÉRATEUR 2D WIN32 OPENGL VC++7

 Sources de la même categorie

Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip Source avec une capture CLASSE AVEC OPENGL - OBJETS 3D ET ANIMATIONS par rasta63
Source avec Zip Source avec une capture LETTRES 3D AVEC OPENGL ET QT par opossum_farceur
Source avec Zip CUBE 3D GLUT32 VC++ ET DEVC++ par bobby03

Commentaires et avis

Commentaire de shenron666 le 18/01/2005 10:39:51

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

Commentaire de Urgo le 18/01/2005 19:32:30

"NON exhaustive" tu voulais dire...

Commentaire de shenron666 le 19/01/2005 09:22:14

Euh oui, désolé, elle est loin d'être exhaustive cette liste je voulais dire

Commentaire de Funto66 le 19/01/2005 19:10:02

Wééé cool ta source :)
Elle ne me servira pas tout de suite mais je sais qu'elle me servira (surtout pour les ombres) ^^

Commentaire de gagah1 le 19/01/2005 20:58:46

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!!!!!!!!

Commentaire de Arnaud16022 le 24/01/2005 20:44:45

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.

Commentaire de shenron666 le 25/01/2005 14:50:44

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

Commentaire de Arnaud16022 le 25/01/2005 22:46:59

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...

Commentaire de Arnaud16022 le 25/01/2005 22:49:12

ouah j'aurai du me relire.. des fautes de frappe a la pelle...

Commentaire de Funto66 le 25/01/2005 23:00:47

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...

Commentaire de Arnaud16022 le 25/01/2005 23:12:52

c'était Funto66, le grand amoureux des vertex array
;)
(bah moi je peux parler c'est pareil avec les listes...)

Commentaire de shenron666 le 26/01/2005 10:36:34

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

Commentaire de Arnaud16022 le 27/01/2005 22:44:57

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...

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales