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 :

Bump Mapping - Erreur ou pas ?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut Bump Mapping - Erreur ou pas ?
    Bonjour tout le monde,

    j'essaye d'implémenter un algorithme de bump-mapping. Malheureusement en voyant mon rendu je pense que j'ai quelque chose qui cloche. Par contre, étant donné que je n'ai rien pour "comparer", je ne sais pas si c'est juste moi ou si j'ai réellement foiré quelque part.

    Je poste donc le vertex/fragment shader, ainsi qu'un lien avec deux rendus: avec et sans bump-mapping.

    [vertex_shader]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #version 120
     
    // Matrix.
    uniform mat4 model_view;
    uniform mat4 projection;
    uniform mat4 light_matrix;
     
    // Input: direction de la lumiere.
    uniform vec3 lightDir;
     
    // Output pour le fragment.
    varying vec2 fragment_texcoord;
    varying vec3 texture_light;
    varying vec3 texture_eye;
     
    void main(void) {
    	// Calculer la nouvelle position.
    	gl_Position = projection * model_view * gl_Vertex;
     
    	// Calculer les vecteurs de la matrice TBN.
    	vec3 t = (model_view*vec4(1.0, 0.0, 0.0, 0.0)).xyz;
    	vec3 n = (model_view*vec4(gl_Normal, 0.0)).xyz;
    	vec3 b = cross(n, t);
    	mat3 matrice_tbn = mat3(t, b, n);
     
    	// Normaliser le vecteur lumiere.
    	//vec3 light = normalize(vec4(-lightDir, 0.0)).xyz;
    	vec3 light = normalize( light_matrix * vec4(-lightDir, 0.0)).xyz;
     
    	// Calculer les composantes de texture_light dans l'espace TBN.
    	texture_light = matrice_tbn * light;
     
    	vec3 eye = (model_view*gl_Vertex).xyz;
    	eye = normalize(-eye);
     
    	// Calculer texture_eye dans l'espace TBN.
    	texture_eye = matrice_tbn * eye;
     
    	// Fournir au fragment les coordonnées de texture.
    	fragment_texcoord = gl_MultiTexCoord0.st;
    }
    [fragment_shader]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #version 120
     
    // Textures.
    uniform sampler2D base_texture;
    uniform sampler2D normal_map;
     
    // Input du fragment.
    varying vec2 fragment_texcoord;
    varying vec3 texture_light;
    varying vec3 texture_eye;
     
    void main(void) {
    	float diffuse_intensity;
    	float specular_intensity;
     
    	vec3 light, normal, eye, reflection;
    	vec4 fragColor;
     
    	// Obtenir la normal via la normal_map.
    	normal = normalize( texture2D(normal_map, fragment_texcoord).xyz * 2.0 - 1.0 );
    	normal.y *= -1; // Les normal-map sont générée pour DX, donc il faut adapter.
     
    	light = normalize(texture_light);
    	eye = normalize(texture_eye);
     
    	// Calculer l'intensité de la couleur diffuse, reflection, et specular.
    	diffuse_intensity = clamp(max(dot(normal, light), 0.0), 0.0, 1.0);	
    	reflection = normalize(reflect(-light, normal));
    	specular_intensity = pow(clamp(max(dot(reflection, eye), 0.0), 0.0, 1.0), 0.0 );
     
    	// Calculer la couleur finale.
    	fragColor = 2 * vec4(0.0, 0.0, 0.0, 1.0);
    	fragColor += texture2D(base_texture, fragment_texcoord)*diffuse_intensity;
    	fragColor += vec4(0.0, 0.0, 0.0, 1.0) * specular_intensity;
     
    	// Positionner la couleur.
    	gl_FragColor = fragColor;
    }
    [Lien]
    Avec Bump-Mapping: Lien
    Sans Bump-Mapping: Lien

    J'espère que quelqu'un pourra me dire ce qui cloche! :-)

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    Désolé pour ceux qui ont essayé de regarder les screens, apparament mon lien n'était pas bon. Du coup j'ai up les images sur monster-up. :-)

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 174
    Billets dans le blog
    155
    Par défaut
    Bonjour,

    J'avais regardé hier, les images ... Je dirais que sans la height map, on peut pas dire si c'est juste ou faux.
    Mais il ne me semble pas que ce soit faux ( mais je n'ai pas regardé le code ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    Merci beaucoup pour ta réponse!
    Alors, pour la normal-map je l'ai générée avec The Gimp, je sais pas ce qu'elle vaut mais on m'a dit qu'elle n'était pas terrible ...

    Normal Map: ici (normal_map.tga)

  5. #5
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Si tu as pris ce plugin pour gimp : http://registry.gimp.org/node/69
    Normalement pas de soucis, c'est un clone du plugin proposé par Nvidia pour photoshop.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    Normalement c'est bien ce plugin, j'ai installé le plugin gimp-normalmap présent dans mes dépots.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/03/2006, 21h40
  2. Réponses: 5
    Dernier message: 22/11/2005, 15h16
  3. Réponses: 22
    Dernier message: 28/07/2005, 22h37
  4. Comment faire du bump mapping
    Par CladStrife dans le forum DirectX
    Réponses: 7
    Dernier message: 01/01/2004, 06h07
  5. Bump mapping
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 22/11/2003, 19h35

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