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

DirectX Discussion :

Calcul de tangente pour un mesh


Sujet :

DirectX

  1. #1
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Calcul de tangente pour un mesh
    Après avoir loader un mesh, je souhaiterais calculer la tangente de chacun de ses vertex. J'ai trouvé quelques sources sur le net mais rien qui me conviennent, quelqu'un pourrait-il m'aider?
    Merci d'avance.

  2. #2
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    Oyo ! Voilà j'ai une petite fonction pour toi

    Calcul de la matrice TBN:
    T0 B0 N0
    T1 B1 N1
    T2 B2 N2

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <iostream> 
    #include <windows.h> 
    #include "Vector.h" 
     
    // Structure d'un vertex et de ses coordonn?es de texture 
    struct Vecteur3st { 
       float x,y,z; 
       float s,t; 
    }; 
     
    // Calcul la tangente & la binormal au polygon 
    void ComputeTangent(Vecteur3st v0, Vecteur3st v1, Vecteur3st v2, Vector *tangent,  Vector *binormal) 
    { 
       // On calcul les diff?rents vecteurs pour effectuer le calcul 
       Vector vx0(v0.x, v0.s, v0.t); 
       Vector vx1(v1.x, v1.s, v1.t); 
       Vector vx2(v2.x, v2.s, v2.t); 
     
       Vector vy0(v0.y, v0.s, v0.t); 
       Vector vy1(v1.y, v1.s, v1.t); 
       Vector vy2(v2.y, v2.s, v2.t); 
     
       Vector vz0(v0.z, v0.s, v0.t); 
       Vector vz1(v1.z, v1.s, v1.t); 
       Vector vz2(v2.z, v2.s, v2.t); 
     
       // Calcul des 3 equation de plan 
       Vector abc0((vx0-vx1) ^ (vx0-vx2)); 
       Vector abc1((vy0-vy1) ^ (vy0-vy2)); 
       Vector abc2((vz0-vz1) ^ (vz0-vz2)); 
     
       if(tangent) 
       { 
          tangent->VecteurNew(-abc0.y/abc0.x,-abc1.y/abc1.x, -abc2.y/abc2.x); 
          tangent->normalize(); 
       } 
       if(binormal) 
       { 
          binormal->VecteurNew(-abc0.z/abc0.x,-abc1.z/abc1.x, -abc2.z/abc2.x); 
          binormal->normalize(); 
       } 
    } 
     
     
    // Fonction principale 
    int main() 
    { 
       // vertex 
       Vector V0(0.0f, 0.0f, 0.0f); 
       Vector V1(1.0f, 0.0f, 0.0f); 
       Vector V2(0.0f, 1.0f, 0.0f); 
     
       // vertex et coord texture 
       Vecteur3st v0={V0.x, V0.y, V0.z, 0.0f, 0.0f }; 
       Vecteur3st v1={V1.x, V1.y, V1.z, 1.0f, 0.0f }; 
       Vecteur3st v2={V2.x, V2.y, V2.z, 0.0f, 1.0f }; 
     
       // On cr?e les vecteurs 
       Vector tangent, binormal, normal; 
     
       // on les calcul 
       ComputeTangent(v0, v1, v2, &tangent, &binormal); 
       normal = ((V1-V0)^(V2-V0)); 
       normal.normalize(); 
     
       // affichage du r?sultat 
       printf("Tangente : x : %f, y : %f, z : %f\n",tangent.x, tangent.y, tangent.z); 
       printf("Binormal : x : %f, y : %f, z : %f\n",binormal.x, binormal.y, binormal.z); 
       printf("Normal   : x : %f, y : %f, z : %f\n",normal.x, normal.y, normal.z); 
     
       return 0; 
    }
    Pris sur le forum du site : http://brugevin.boris.free.fr/
    Pensez aux tutoriels programmation : http://programmation.developpez.com/cours-tutoriels/

  3. #3
    Membre actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    Par défaut
    En cherchant comment calculer les TBN je suis tombé sur cette approche.

    Après avoir tester le soucis est qu'elle n'est qu'un cas particulier. C'est à dire que si la normale est issue d'un lissage ( avec ou sans angle limite ), la tangente elle ne l'est pas. Ce qui fait des coupures net entre les différents polygones.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    La tangente ? Mais un point sur une surface a une infinité de tangente non ? Ou alors il faut fixer une contrainte. Je me trompe ?
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

Discussions similaires

  1. Calcul des tangentes pour le bump mapping
    Par Charlie111 dans le forum OpenGL
    Réponses: 4
    Dernier message: 02/06/2010, 19h00
  2. Calculer la normal pour chaque vertex
    Par DestinyWar45 dans le forum OpenGL
    Réponses: 13
    Dernier message: 11/12/2006, 08h07
  3. Calcul des Tangents d'un Mesh
    Par funkydata dans le forum DirectX
    Réponses: 4
    Dernier message: 08/06/2006, 18h35
  4. [MySQL] Fonctions calculs SQL/PHP pour projet football
    Par spamyx dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 16h16
  5. [DirectX9] clés pour un mesh + qq questions carte 3d
    Par SteelBox dans le forum DirectX
    Réponses: 1
    Dernier message: 07/07/2005, 22h02

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