Ombres volumétriques d'objets 3d en utilisant le stencil (c++ / opengl / win32)

Soyez le premier à donner votre avis sur cette source.

Vue 8 177 fois - Téléchargée 1 438 fois

Description

Toujours dans la série OpenGL à donf, la 3D j'adore ça :-))

Ce programme est un évolution du "précédent" : http://www.cppfrance.com/code.aspx?id=28920

Cette fois on va plus loin dans l'utilisation du stencil buffer alors j'espère que vous avez compris son fonctionnement, on applique ici une méthode de calcule d'ombre dite volumétrique, on calcule la silhouette des objets par rapport à la position de la lumière et on crée un volume d'ombre à partir de cette silhouette en étirant les arretes de celle ci dans la direction lumière->objet
C'est pas simple mais pas si compliqué que cela, c'est des maths/géométrie vectorielle

L'avantage par rapport à l'autre méthode c'est que l'ombre est "réelle" et se projette sur les autres objets 3D, le premier jeu à utiliser cette technique est doom3, bien sûr elle y est optimisée et + évoluée et elle utilise les shaders (calculs 3D en interne à la carte graphique) lorsque cela est possible mais là vous avez les base et vous êtes libre de vous en inspirer

A noter la contrainte pour obtenir une ombre qui ne buggue pas : les objets 3D doivent être des volumes parfaits...
c'est à dire qu'un objet est composé exclusivement de triangles (3côtés), que chaque triangle doit être raccordé à 3 autres triangles (ses voisins), pas plus et pas moins, donc l'objet doit avoir en toute circonstance un intérieur et un extérieur, comme un volume
j'espère que je me fait comprendre

pour d'autres explications sur la technique et d'autres possibilités approfondies vous pouvez aller voir un document pdf (1,2 mo) qui explique cela relativement bien : http://developer.nvidia.com/attach/6774

j'ai essayé de commenter les parties importantes autant que possible en fonction du peu de tems libre que j'ai en ce moment
alors bon courage quand même ^__^

Conclusion :


Il est possible d'optimiser énormément le code, il doit y avoir quelques bugs, si vous en voyez et que vous avez la solution n'hésitez pas à en faire part, je ferai une mise à jour dès que j'en aurai le temps

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

L'historique est juste après la liste des fichiers ZIP

Pour ce qui est des objets il n'y a pas de texture, c'est juste un objet coloré et éclairé par une lumière locale

par contre je ne comprend pas ce que tu veux dire par "yaurait pas moyen de ne faire que des ombres portées, et laisser les autres a openGL?"
par ce que dans le cas de mon prog, je laisse opengl dessiner et générer les ombres, moi je dois lui calculer les volumes
tu comprendras peut-etre mieux le principe lorsque tu te sera plongé dans le code

j'espère trouver rapidement du temps pour me remettre à coder et optimiser tout ca et pourquoi pas faire un pti jeu mais bon avec moi ca marche jamaisn je vois trop grand et ce n'abouti pas

si tu as des questions pour comprendre ce que j'ai fait n'hésites pas à demander et bon courage pour le bac blanc
Messages postés
1329
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
16 juin 2010
2
effectivement ca marche, merci bcp.
j'ai pas vu d'historique, qu'as tu fait pour corriger un truc comme ca?
le rendu est bizarre... en gros c'est ca mais... on dirait presque que tes objets sont bump-mappés...d'ailleurs ca se voit sur ton srceenshot.
yaurait pas moyen de ne faire que des ombres portées, et laisser les autres a openGL? ( a mon avis non, mais on sait jamais)

bon, j'attends la fin du bac blanc (et les vacances!!! :) ) et je me plonge dans ton code.
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

Petite mise à jour qui corrige le bug d'absence d'affichage des ombres sur les cartes radeon 9000 et 9200, voir infos de mise à jour dans l'historique
Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

Ok je vais regarder ca qd j'aurais le temps
Messages postés
229
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014

Asmanur, si tu es intéressé par du code de chargement d'objets 3D tu peux jeter un oeil à mon Viewer 3D qui charge les format OBJ (comme ici), 3DS et MS3D :
http://www.cppfrance.com/code.aspx?ID=29029
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.