IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Explication bump mapping


Sujet :

OpenGL

  1. #1
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut Explication bump mapping
    Salut,
    je debute en opengl et je n'interesse au bump-mapping. J'ai fait quelques recherches mais aucun site ne propose une explication digne de ce nom.
    J'ai compris qu'il s'agit de modifier la normale en fonction de l'image de la texture en niveau de gris (pour faire resortir les effets liés aux materiaux), mais COMMENT FAIT-ON CELA ? Qu'elles sont les demarches à suivre.
    Est-on obligé d'ajouter des extensions pour obtenir l'effet tant convoité?
    Je suis également preneur de tous tuto suffisement detaillé.
    A votre bon coeur m'sieur dame.
    ps: je bosse sous delphi...

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu as commencé par la FAQ ?
    Qu'est-ce que le bump mapping ?

    Pour ce qui est du coding en OpenGL, il doit y avoir des tas de samples dispos sur le net ; à commencer par NeHe j'imagine.

  3. #3
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu as commencé par la FAQ ?
    Qu'est-ce que le bump mapping ?
    oui j'ai commencé par la faq et aussi par le site proposé dans la faq (trés interessant... tout s'est eclairé d'un coup).
    Citation Envoyé par Laurent Gomila
    Pour ce qui est du coding en OpenGL, il doit y avoir des tas de samples dispos sur le net ; à commencer par NeHe j'imagine.
    ah... nehe... je sais pas ce que vous lui trouver...moi je ne comprend rien de ce qu'il fait.
    pour ceux qui veulent du nehe sur le sujet:
    http://nehe.gamedev.net/data/lessons....asp?lesson=22
    http://nehe.gamedev.net/data/article...asp?article=20

  4. #4
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    je vais tenter de clarifier les choses:
    Je sais qu'il faut faire une bump-map (ca si j'ai bien compris c'est ma texture en niveau de gris) mais je ne sais pas comment l'utiliser aprés.
    Ensuite, je ne sait pas si je suis obligé d'utiliser une normale-map (si j'ai bien compris c'est une image bizarre parce que nos yeux ne sont pas fait pour regarder des vecteurs . RVB represente X,Y,Z des vecteurs en chaque points...).
    donc dans l'ordre et pour commencer:
    -chargement de ma texture.
    -chargement de ma bump-map comme une texture.
    (a partir de là je suis largé alors je ne sais pas si ce que j'ecris et correct ... et dans l'ordre)
    -transformation de ma bump-map pour obtenir
    les informations détaillant le relief ?...
    -eclairer ?... (visiblement c'est grace au jeux d'éclairage que l'on obtient l'effet voulu)

  5. #5
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    en fait il existe plein de techniques pour faire du bump mapping.
    par exemple, on peut fait de l'emboss bump mapping si on veut une technique lente pas belle et qui pompe des ressources

    sinon, la technique generalement utilisée est le DOT3 bump mapping
    en gros ca consiste a avoir une normal map (pas besoin de bump map à l'execution, il existe pleins de petits programmes sur le net qui permettent de generer une normal map à partir d'une bump map (google => normal mapper))
    une fois que tu a ta normal map, il faut calculer les tengentes et binormals de chaques vertex de ton model.
    à l'execution, pour chaque vertex, tu projete la position de la lumiere dans l'espace local du vertex (TBN), et apres, tu utilise l'extention DOT3 ou un fragment program pour calculer ton bump mapping...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  6. #6
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    ok... je suis obligé de passer par la dot quoi (pour obtenir un truc credible)
    dans la faq on peut trouvé ceci:
    http://www.delphi3d.net/dot/
    parlent on bien de la meme chose?

    La normale-map c'est bien une image dont les couleurs RVB en chaque points defini les coordonées de mes vecteurs?
    Pour obtenir une normale-map il faut une bump-map, mais lors de l'execution je n'en ai plus besoin. (si j'ai bien compris)
    une fois que tu a ta normal map, il faut calculer les tangentes et binormals de chaques vertex de ton model.
    Je vais obtenir deux tableaux?
    et apres, tu utilise l'extention DOT3 ou un fragment program pour calculer ton bump mapping
    Tous ce qu'on a fait avant c'était pas le calcul du bump-mapping?

  7. #7
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Moi j'aime bien NeHe. Y'a plein de code commenté sur tout openGL dans plein de langages. Ca serait dommage de s'en passer

    La leçon 22 a l'air très bien. Elle donne un effet de bump sans normal map et sans faire de calcul sur chaque fragment, juste avec du multi texturing. Comme le dit l'auteur c'est un hack, mais l'effet est là.

  8. #8
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par damienlann
    ok... je suis obligé de passer par la dot quoi (pour obtenir un truc credible)
    dans la faq on peut trouvé ceci:
    http://www.delphi3d.net/dot/
    parlent on bien de la meme chose?
    nope, DOT3 c'est pour GL_DOT3_RGB_EXT, donc de l'openGL pur (enfin pas tant que ça ) et dur.

    Citation Envoyé par damienlann
    La normale-map c'est bien une image dont les couleurs RVB en chaque points defini les coordonées de mes vecteurs?
    Pour obtenir une normale-map il faut une bump-map, mais lors de l'execution je n'en ai plus besoin. (si j'ai bien compris)
    Oui pour la normal-map (même si j'hésiterais à l'appeller une image compte tenu de son contenu). Mais elle peut-être fournie directement sans passer par une bump-map, tout comme on peut faire du bump sans construire une normal-map (les cartes 3d ne peuvent les gérer que depuis peu donc avant on faisait sans, cf NeHe).

    Citation Envoyé par damienlann
    Tous ce qu'on a fait avant c'était pas le calcul du bump-mapping?
    Le bump conciste à modifier l'éclairage suivant un relief virtuel, ou plutôt à éclairer une surface plane suivant ce relief supposé. Donc le calcul du bump lui-même se fait à ce moment là. Avant c'est de la préparation.

    Définir une normal-map tient de la modélisation 3d puisque cela décrit le relief d'une face en superposant à un triangle plat les normales d'une géométrie plus complexe. Tout l'intéret étant d'avoir l'illusion d'un relief complexe en gardant un simple triangle plat (enfin faut quand même mouliner pour les calculs, mais c'est un moindre mal).

  9. #9
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par Sivrît
    nope, DOT3 c'est pour GL_DOT3_RGB_EXT, donc de l'openGL pur (enfin pas tant que ça ) et dur.
    ok mais je doit quand meme ajouté une extension?
    Citation Envoyé par Sivrît
    Oui pour la normal-map (même si j'hésiterais à l'appeller une image compte tenu de son contenu)
    effectivement ca doit etre quelque peu psyquedelique de regarder des vecteur normaux lol.
    Citation Envoyé par Sivrît
    Le bump conciste à modifier l'éclairage suivant un relief virtuel, ou plutôt à éclairer une surface plane suivant ce relief supposé. Donc le calcul du bump lui-même se fait à ce moment là. Avant c'est de la préparation.
    Bon ok mais pour moi ca faitquand meme parti de la recette bumpmapping.
    Citation Envoyé par Sivrît
    Définir une normal-map tient de la modélisation 3d puisque cela décrit le relief d'une face en superposant à un triangle plat les normales d'une géométrie plus complexe. Tout l'intéret étant d'avoir l'illusion d'un relief complexe en gardant un simple triangle plat (enfin faut quand même mouliner pour les calculs, mais c'est un moindre mal).
    je vais Devoir dessiner des triangles?

  10. #10
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Parfois un petit dessin vaut mieux qu'un long discours.
    http://www.developpez.net/forums/att...1&d=1148484592
    En noir: le bump voulu
    En vert: les tangentes
    En rouge:les normales
    La normal-map donnes les infos sur les normales(en rouge).
    A quoi me servent les tangentes?
    Images attachées Images attachées  

  11. #11
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Je comprends très bien ton problème l'ami, j'ai pas mal galéré ladessus moi aussi, donc je vais essayer de t'expliquer la chose.

    Pour simplifier, on va se contenter de texturer puis d'eclairer un simple triangle.
    Pour faire de l'éclairage réaliste en 3D, y'a pas deux chemins à suivre, il faut passer par les normales, càd les vecteurs perpendiculaires à la surface.
    En effet, tout est basé sur une simple équation physique : l'intensité d'une lumière ponctuelle en un point est relative à cos(alpha), avec alpha l'angle entre le vecteur (point, lumière) et (la normale en ce point).
    Maintenat, il faut passer au triangle.
    Au début, histoire de simplifier la chose, on utilisait une seule normale par triangle, on calculait le produit scalaire de cette normale avec le vecteur (centre triangle, lumière) tous les deux normalisés qui vaut cos(angle) (comme par magie). ensuite on modulait la couleur du triangle avec ce coefficient pour obtenier le resultat final. Ca fonctionne mais c'est très moche.
    --> C'est le per-face lightening.

    ensuite, avec l'évolution du matériel, on utilisait une normale pour chaque sommet du triangle, on obtient 3 coefficient, un pour chaque sommet, qu' on interpolait pour remlir la surface du triangle.
    --> C'est le per-vertex lightening.

    Ca marche aussi, et c'est beaucoup plus beau que la 1ère technique, mais c a des limites : en effet, il faut que la taille du triangle ne soit pas très grande pour avoir des résultats corrects, ce qui nous oblige à utiliser des modèles sur-tesselés avec tous les problèmes que ca engendre (chute de performance, grosse utilisation de mémoire, ...).

    Ensuite, on a voulu pousser la limite encore, et on a passé au per-pixel lightening.
    Si vous avez bien suivi jusque la, vous devriez savoir que pour y arriver, il nous faut une normale pour chaque pixel du triangle ! comment le faire ? La méthode la plus efficace est d'utiliser une texture.
    Une normale est un vecteur (x, y, z), de plus, on ne travaille que sur des vecteurs normalisés, x, y et z sont entre -1 et 1.
    Comment coder un tel vecteur dans une couleur (r, g, b) ?
    on pose r=(x+1)/2 ; g=(y+1)/2 ; b=(z+1)/2 ;
    r, g et b sont tous ente 0 et 1, c'est bien une couleur, de plus, on peut retrouver les valeurs de x, y et z à partir de r, g, b : cette transformation nous convient.
    On sait donc stocker un champs de vecteurs dans une texture, et c'est ce qu'on appelle normal map. Comme la majorité des normales sont orientés vers les Z positifs, la composante B est la composante dominante, c'est pourquoi les normal maps ont une couleur bleuatre.

    Ensuite, tout ce qui reste à faire c'est de moduler la couleur de chaque pixel du triangle par le pixel qui represente la normale de ce pixel. Il faut au préalable décoder la couleur du pixel pour retrouver la normal par l'équatoin x=2*r-1, y=2*g-1, ... : c'est à cela que sert l'extension GL_DOT3_RGB.

    NB : C'est une vue extrèment simplifié de la chose, j'ai volontairement omis de parler de la transformation du repère local au repère tangent + la normalisation avec le cube map.

    En espérant que ça a aidé.

  12. #12
    Membre régulier Avatar de NiuAge
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Ca me donne presque envie de m'y essayer !
    Simple et clair.

  13. #13
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par Modjo
    Bonjour.
    Je comprends très bien ton problème l'ami... c'est à cela que sert l'extension GL_DOT3_RGB.
    oui ca j'avais tous bien compris comme il faut mais c'est du point de vue technique que vient mon blocage. Je ne vois pas du tout comment faire. Je ne sais pas non plus ou je peut trouver l'extension dot3 (pour delphi)
    Citation Envoyé par Modjo
    NB : C'est une vue extrèment simplifié de la chose, j'ai volontairement omis de parler de la transformation du repère local au repère tangent + la normalisation avec le cube map.
    et tous ca.... ca sert a quoi? parce que si j'essaye de faire du bump mapping et que j'ai pas tous les elements en main ca va pas etre facile.


    ps: ca change rien dans la maniere de dessiner??? si je veut un quads je dessine un gl_quads etc...???

  14. #14
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par damienlann
    oui ca j'avais tous bien compris comme il faut mais c'est du point de vue technique que vient mon blocage. Je ne vois pas du tout comment faire. Je ne sais pas non plus ou je peut trouver l'extension dot3 (pour delphi)
    normal, c'est juest un parametre a passer au fonction de configuration des textures...
    Citation Envoyé par damienlann
    ps: ca change rien dans la maniere de dessiner??? si je veut un quads je dessine un gl_quads etc...???
    non... enfin si un peut quand même, mais l'envoi de la geometrie reste identique (par contre, tu devra passer des coordonnée de texture un peut etranges par moments )
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  15. #15
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    donc un petit pseudo-code de ce que j'ai compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dessiner mon polygone avec sa texture (truc banal) 
    pour chaque pixel du polygone 
       affecter la valeur du vecteur correspondant dans la normal-map.
    (j'avais prevenu c'est un petit pseudo-code)
    cela dit il doit manquer des trucs (tangentes... je sais toujours pas a quoi ca sert).
    Au fait c'est suffisement portable comme effet? Pas de probleme avec les cartes graphique actuelle?

  16. #16
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    en (tres) gros, c'est ca l' principe, mais le "truc", c'est que la partie
    Citation Envoyé par damienlann
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pour chaque pixel du polygone 
       affecter la valeur du vecteur correspondant dans la normal-map.
    en entierement prise en charge par la carte graphique (via l'extension ENV_DOT3 ou un fragment program)
    Citation Envoyé par damienlann
    cela dit il doit manquer des trucs (tangentes... je sais toujours pas a quoi ca sert).
    a la base, pour le bump mapping, tu n'a pas besoin d'espace tangent, tu peut tres bien fair du global bump mapping. l'espace tangent ne sert qu'a pouvoir reutiliser les bump map dans "tout les sens" (ok c'est pas super bien exprimé tout ca )
    Pour commencer simplement à utiliser le bump mapping, tu peut tres bien utiliser un plan aligné sur les axes X et Y, ca te permettre de tester l'effet sans avoir a utiliser d'espace local par vertex.
    Citation Envoyé par damienlann
    Au fait c'est suffisement portable comme effet? Pas de probleme avec les cartes graphique actuelle?
    si tu utilise l'extension ENV_DOT3, c'est supporté depuis les GeForce 2, donc une tres vieille carte. et si tu utilise un fragment program, c'est supproté depuis les GeForce FX / radeon 9500, et comme c'est de l'ARB, pas de probleme de portabilité
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  17. #17
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par bafman
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pour chaque pixel du polygone 
       affecter la valeur du vecteur correspondant dans la normal-map.
    entierement prise en charge par la carte graphique (via l'extension ENV_DOT3 ou un fragment program)
    Ok Genial.
    Citation Envoyé par bafman
    a la base, pour le bump mapping, tu n'as pas besoin d'espace tangent...
    Ok Genial.
    Citation Envoyé par bafman
    si tu utilises l'extension ENV_DOT3
    Ben je vais faire ca alors...
    Je la trouve ou cette extension ? (pour delphi)

  18. #18
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    c'est la que c'est encore mieux... tu n'as pas de fonctions spécialement dédié à cette extension, juste des parametres à passer a glTexEnv*... bref pour delphi ou C, c'est la même chose
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  19. #19
    Membre actif Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Points : 249
    Points
    249
    Par défaut
    attends....
    -j'ai aucun fichier a ajouter?
    -juste des parametres à passer a glTexEnv?
    -deux textures? (1 texture et 1 bump-map)
    -pour faire un truc simple j'ai meme pas de calculs compliqué a faire

    et pas un seul tuto capable d'expliquer ça en francais????...

  20. #20
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    attention quand même, ce n'est pas non plus forcement trivialement simple
    Citation Envoyé par damienlann
    -j'ai aucun fichier a ajouter?
    si, l'equivalent du glext.h pour dephi... c'est tout
    Citation Envoyé par damienlann
    -juste des parametres à passer a glTexEnv?
    pour faire du dot3 global oui, le probleme, c'est que personne ne fait de dot3 global, car ca oblige à faire des bump map global et non pas local comme on les vois partout (on parle de global map/local map)
    Citation Envoyé par damienlann
    -deux textures? (1 texture et 1 bump-map)
    si tu passe la position de la lumiere par des glColor oui, sinon, il te faudra une cube map de normalisation en plus
    Citation Envoyé par damienlann
    -pour faire un truc simple j'ai meme pas de calculs compliqué a faire
    il y a quand même un minimum de calcules a faire quand même
    Citation Envoyé par damienlann
    et pas un seul tuto capable d'expliquer ça en francais????...
    tout les tutos qu'on trouve sur le net parle de local bump mapping, donc qui oblige à faire des calcules lourd pour obtenir l'espace local de chaque pixel. mais pas besoin de tout ca pour faire des petites bidouille en global bump mapping (pour prendre en mains l'extension)...
    Attention quand même, le global bump mapping est TRES limité, c'est d'ailleurs pour ca qu'il n'est jamais utilisé en pratique (sauf pour quelques generateurs de terrains), mais il peut te permettre de te familliariser avec l'extension plus simplement qu'avec le local bump mapping...

    je reprend le principe :
    pour fair du bump mapping, tu a besoin :
    1. d'une normal map. chaque texel de ta normal map est en fait un vecteur definissant une normal de la surface. si ton polygone est positionné sur le plan XY, alors les normales de la normal map correspondent bien aux normales voulu de la surface, par contre, si tu effectue une rotation à 90° du polygone, les normales ne correspondent plus du tout (elles pointent toujours vers les Z alors qu'on souhaierait qu'elles pointent vers les X (ou Y selon l'axe de rotation...). donc pour resoudre ce probleme, on est obligé de projeter la position de la lumiere dans l'espace local de chaque vertex. En gros ca revient a effectuer les calcules comme si on etait sur le plan XY...
      Mais si tu reste sur le plan XY, tu n'a pas besoin de faire ce calcule de projection, ce qui est bien pratique pour s'entrainer avec l'extension...
    2. de definir des vecteur qui pointent vers la position de la lumiere. Pour le calcule du bump mapping, on a besoin de 2 vecteur pour effectuer le produit sclaire : le vecteur normal à la surface (dans la normal map) et le vecteur vers la lumiere. ici c'est ce dernier dont on a besoin. pour le recupere, il existe en gros 2 solution :
      1. la premiere consiste a calculer le vecteur normalisé a chaque vertex, puis à la passer comme couleur du vertex (comme pour la normal map on passe par la couleur). en gros ca reviens à faire ca :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        5
         
        pour chaque vertex
            calcule du vecteur vertex->lumiere normalisé
            glColor3f(vecteur)
        fin pour
        ainsi, pour chaque pixel du polygone on aura une approximation du vecteur voulu. le probleme de cette methode, c'est qu'elle fonctionne par vertex, donc pour les polygones etendu, on va avoir des "normales" qui ne seront plus du tout normalisée, et surtout on retombe sur les problemes de l'eclairage par vertex (ce qui est idiot quand on fait de l'eclairage par pixel ). Pour resoudre ca, c'est ici qu'intervient la seconde methode
      2. la seconde methode consiste à utiliser ce qu'on appel une cube map de normalisation pour recuperer le vecteur pixel->lumiere. imagine une cube map dont chaque texel est un vecteur normalisé qui pointe vers le centre du cube... voila, c'est ca une cube map de normalisation. une fois qu'on a notre cube map, il suffit de placer son centre à la position de la lumiere, et on à ainsi pour chaque polygone les vecteurs vers la lumiere...

      bien entendu, on peut aussi utiliser la premiere methode et renormaliser les vecteur dans un fragment program, mais ce n'est pas le but ici

    donc pour t'entrainer, tu peut effectuer le petit test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // initialiser les unité de texture (attention a bien respecter l'ordre des textures)
    unité de texture 1 : normal map parametré pour le dot3
    unité de texture 2 : texture en mode modulate
    glQuad // sur l'axe XY
        pour chaque vertex
            calculer le vecteur vertex->lumiere
            glColor3f(le vecteur vertex->lumiere)
            glVertex(...)
        finpour
    glEnd
    bon je recherche les parametre a passer pour configurer le dot3 et je poste des que j'aurais retrouvé ca...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Raytracing et bump mapping
    Par ydethe dans le forum Moteurs 3D
    Réponses: 5
    Dernier message: 22/06/2007, 13h03
  2. Réponses: 4
    Dernier message: 02/03/2006, 20h40
  3. Réponses: 22
    Dernier message: 28/07/2005, 21h37
  4. Comment faire du bump mapping
    Par CladStrife dans le forum DirectX
    Réponses: 7
    Dernier message: 01/01/2004, 05h07
  5. Bump mapping
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 22/11/2003, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo