begin process at 2012 05 27 19:00:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > OMBRES VOLUMÉTRIQUES D'OBJETS 3D EN UTILISANT LE STENCIL (C++ / OPENGL / WIN32)

OMBRES VOLUMÉTRIQUES D'OBJETS 3D EN UTILISANT LE STENCIL (C++ / OPENGL / WIN32)


 Information sur la source

Note :
10 / 10 - par 4 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Initié Date de création :01/02/2005 Date de mise à jour :06/02/2005 22:27:35 Vu / téléchargé :5 126 / 654

Auteur : shenron666

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

 Description

Cliquez pour voir la capture en taille normale
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


 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


 Historique

06 février 2005 22:27:36 :
Comme le disait Arnaud16022 il y avait un problème d'affichage des ombres sur sa radeon 9200, j'ai essayé le programme sur une radeon 9000 et j'avait le problème alors qu'avec ma radeon 9600 ca fonctionnait nickel Le problème identifié j'ai apporté la correction nécessaire, en fait les ombres sont un pochage, une fois le stencil buffer "calculé" on dessine un polygone qui recouvre tout l'écran et dans notre cas le polygone était trop près pour les radeon 9000 et 9200 et il était clippé (retiré de la vue car trop près) par le zbuffer, je l'ai donc éloigné, le truc abérant c'est que sur radeon 9600 j'ai aps le problème (merci monsieur ATI et ses drivers aléatoires)

 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 VIEWER 3D ET GÉNÉRATEUR 2D WIN32 OPENGL VC++7
Source avec Zip Source avec une capture OMBRE PORTÉE ET UTILISATION STENCIL SOUS OPENGL

 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 Arnaud16022 le 02/02/2005 18:17:14

chez moi ca ne fait rien (juste affiche la scene avec la lmiere qui tourne)
aucune ombre portée.

Commentaire de shenron666 le 02/02/2005 22:11:11

Tu as quoi comme carte vidéo ?
étrange vu que même sur un chipset intégré intel ca marche
en plus la source avec les ombres planes fonctionnait bien non ?

Commentaire de Arnaud16022 le 02/02/2005 22:26:13

sé pas je l'avais pas dl
une ati radeon 9200 je crois

Commentaire de shenron666 le 03/02/2005 08:57:22

oki, j'ai essayé le prog ce matin sur le pc de ma copine et effectivement je n'ai pas les ombres, pourrais tu essayer ce prog qui m'a servit à comprendre le principe : http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=27

Le code + exe se trouve en bas de la page

je n'ai pas eu le temps de l'essayer ce matin, désolé, j'ai du partir au boulot

Commentaire de asmanur le 03/02/2005 12:31:08

Super 10/10 rien à redire ( sauf le tank blanc )
Le bout de code sur le chargement d' obj 3D va m'etre très utile
Parfait!

Commentaire de shenron666 le 03/02/2005 14:28:44

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

Commentaire de asmanur le 04/02/2005 12:24:53

Ok je vais regarder ca qd j'aurais le temps

Commentaire de shenron666 le 06/02/2005 22:33:34

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

Commentaire de Arnaud16022 le 06/02/2005 23:04:17

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.

Commentaire de shenron666 le 07/02/2005 10:58:49

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

 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,390 sec (4)

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