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 :

Calcul des tangentes pour le bump mapping


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 53
    Points : 36
    Points
    36
    Par défaut Calcul des tangentes pour le bump mapping
    Bonjour,

    J'ai un problème pour calculer les tangentes pour le bump mapping.

    J'ai trouvé cette fonction mais je ne vois pas à quoi correspond st1 et st2.
    (ça vient de ce site : http://www.fabiensanglard.net/bumpMapping/index.php)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	generateNormalAndTangent(float3 v1, float3 v2, text2 st1, text2 st2)
    	{
    		float3 normal = v1.crossProduct(v2);
     
    		float coef = 1/ (st1.u * st2.v - st2.u * st1.v);
    		float3 tangent;
     
    		tangent.x = coef * ((v1.x * st2.v)  + (v2.x * -st1.v));
    		tangent.y = coef * ((v1.y * st2.v)  + (v2.y * -st1.v));
    		tangent.z = coef * ((v1.z * st2.v)  + (v2.z * -st1.v));
     
    		float3 binormal = normal.crossProduct(tangent);
    	}
    Mes normales sont déjà calculées, ce sont les tangentes qui posent problèmes.
    Je m'arrache les cheveux là dessus...

    Merci d'avance.

    ++

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 64
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Désolé, je n'ai pas trop le temps de regarder ton code, mais as-tu essayé de regarder là : http://mdeverdelhan.developpez.com/t...ght/tutoriel4/

    Tu y trouveras la fonction computeLocalSpace(...) qui fait le calcul des tangentes.

  3. #3
    Membre actif Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut
    Salut,

    Si ça peut t'aider, c'est ce que j'utilise dans mes shaders de bump mapping pour calculer la tangente :

    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
     
        //approximation du vecteur tangent.
            vec3 c1 = cross(gl_Normal, vec3(0.0, 0.0, 1.0));
    	vec3 c2 = cross(gl_Normal, vec3(0.0, 1.0, 0.0));
    	if(length(c1)>length(c2))
    	{
    		vTangent = c1;
    	}
    	else
    	{
    		vTangent = c2;
    	}
     
     
    	vec3 n = normalize(gl_NormalMatrix * gl_Normal);
    	vec3 t = normalize(gl_NormalMatrix * vTangent);
    	vec3 b = cross(n, t);
    Bon, après c'est une approximation mais ça donne des résultats plus que correcte.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par Robxley Voir le message
    Salut,

    Si ça peut t'aider, c'est ce que j'utilise dans mes shaders de bump mapping pour calculer la tangente :

    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
     
        //approximation du vecteur tangent.
            vec3 c1 = cross(gl_Normal, vec3(0.0, 0.0, 1.0));
    	vec3 c2 = cross(gl_Normal, vec3(0.0, 1.0, 0.0));
    	if(length(c1)>length(c2))
    	{
    		vTangent = c1;
    	}
    	else
    	{
    		vTangent = c2;
    	}
     
     
    	vec3 n = normalize(gl_NormalMatrix * gl_Normal);
    	vec3 t = normalize(gl_NormalMatrix * vTangent);
    	vec3 b = cross(n, t);
    Bon, après c'est une approximation mais ça donne des résultats plus que correcte.
    il faut aussi ajouter la déclaration de vTangent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    attribute vec3 vTangent;
    vTangent est géré par GLSL donc rien d'autre a faire.
    regarde ici pour plus d'explications:http://ozone3d.net/tutorials/bump_mapping.php

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 53
    Points : 36
    Points
    36
    Par défaut
    Merci à tous, j'ai trouvé mon bonheur : http://www.dhpoware.com/demos/gl3NormalMapping.html

    ++

Discussions similaires

  1. Calcul des minutes pour un horaire
    Par IDE dans le forum Excel
    Réponses: 1
    Dernier message: 05/12/2008, 16h40
  2. Calcul de tangente pour un mesh
    Par derferic dans le forum DirectX
    Réponses: 3
    Dernier message: 24/05/2008, 01h53
  3. calculer des chiffres pour envoyer dans la bdd
    Par mecmec dans le forum Flash
    Réponses: 1
    Dernier message: 04/07/2007, 09h10
  4. Réponses: 2
    Dernier message: 26/04/2007, 14h04
  5. Calcul des Tangents d'un Mesh
    Par funkydata dans le forum DirectX
    Réponses: 4
    Dernier message: 08/06/2006, 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