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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 53
    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 confirmé
    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
    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 éprouvé 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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    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.

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 318
    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
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 53
    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, 17h40
  2. Calcul de tangente pour un mesh
    Par derferic dans le forum DirectX
    Réponses: 3
    Dernier message: 24/05/2008, 02h53
  3. calculer des chiffres pour envoyer dans la bdd
    Par mecmec dans le forum Flash
    Réponses: 1
    Dernier message: 04/07/2007, 10h10
  4. Réponses: 2
    Dernier message: 26/04/2007, 15h04
  5. Calcul des Tangents d'un Mesh
    Par funkydata dans le forum DirectX
    Réponses: 4
    Dernier message: 08/06/2006, 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