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. Question sur l'espace tangent.


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 208
    Par défaut Bump mapping. Question sur l'espace tangent.
    Bonsoir amis codeurs!

    Toujours sur ma découverte de WebGL, je suis en train d'implémenter un petit bump mapping.
    Pour m'aider, j'ai sous la main le tuto de chez oZone3D et le shader "ParalaxBumpMapping" du logiciel Shader Designer.

    Voici un aperçu de ce que j'obtiens :

    http://www.youtube.com/watch?v=-B9XRvGADMw


    On peut voir (sur les trous du dés par exemple) que la lumière (fixe) n'a pas l'air d'être calculée de la même manière sur toutes mes faces lors de la rotation du dés.

    Est-il possible que cet effet vienne du calcul de mon espace tangent?

    Mes normales sont correctes (données par mon logiciel de modélisation), mais j'ai peur que mon calcul de tangentes soit inexacte.

    En effet, d'après le tuto de chez oZone, on apprend qu'il est possible d'en avoir une approximation en faisant de la manière suivante :

    vec3 tangent;
    vec3 binormal;

    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))
    {
    tangent = c1;
    }
    else
    {
    tangent = c2;
    }

    tangent = normalize(tangent);
    J'imagine que je suis un peu trop feignant et qu'il vaudrait mieux que je calcule ma tangente en fonction des trois vertices de chaque face?
    Pour info, avec cette méthode, voilà ce que j'obtiens pour mon dés :

    Normale : 0,-1,0 / Tangente : [-1,0,0] / Binormale : [0,0,-1]
    Normale : 0,-1,0 / Tangente : [-1,0,0] / Binormale : [0,0,-1]
    Normale : 0,-1,0 / Tangente : [-1,0,0] / Binormale : [0,0,-1]
    Normale : 0,-1,0 / Tangente : [-1,0,0] / Binormale : [0,0,-1]
    Normale : 0,1,0 / Tangente : [1,0,0] / Binormale : [0,0,-1]
    Normale : 0,1,0 / Tangente : [1,0,0] / Binormale : [0,0,-1]
    Normale : 0,1,0 / Tangente : [1,0,0] / Binormale : [0,0,-1]
    Normale : 0,1,0 / Tangente : [1,0,0] / Binormale : [0,0,-1]
    Normale : 0,0,1 / Tangente : [0,1,0] / Binormale : [-1,0,0]
    Normale : 0,0,1 / Tangente : [0,1,0] / Binormale : [-1,0,0]
    Normale : 0,0,1 / Tangente : [0,1,0] / Binormale : [-1,0,0]
    Normale : 0,0,1 / Tangente : [0,1,0] / Binormale : [-1,0,0]
    Normale : 1,0,0 / Tangente : [0,0,1] / Binormale : [0,-1,0]
    Normale : 1,0,0 / Tangente : [0,0,1] / Binormale : [0,-1,0]
    Normale : 1,0,0 / Tangente : [0,0,1] / Binormale : [0,-1,0]
    Normale : 1,0,0 / Tangente : [0,0,1] / Binormale : [0,-1,0]
    Normale : 0,0,-1 / Tangente : [0,-1,0] / Binormale : [-1,0,0]
    Normale : 0,0,-1 / Tangente : [0,-1,0] / Binormale : [-1,0,0]
    Normale : 0,0,-1 / Tangente : [0,-1,0] / Binormale : [-1,0,0]
    Normale : 0,0,-1 / Tangente : [0,-1,0] / Binormale : [-1,0,0]
    Normale : -1,0,0 / Tangente : [0,0,-1] / Binormale : [0,-1,0]
    Normale : -1,0,0 / Tangente : [0,0,-1] / Binormale : [0,-1,0]
    Normale : -1,0,0 / Tangente : [0,0,-1] / Binormale : [0,-1,0]
    Normale : -1,0,0 / Tangente : [0,0,-1] / Binormale : [0,-1,0]

  2. #2
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    Bonjour,

    C'est fortement possible que votre problème vienne du calcul de l'espace tangent.

    Les vecteurs tangent et binormal que vous calculez ne correspondent pas aux "vrais" vecteurs. Ces vecteurs doivent être alignés avec les axes u et v de l'espace texture.

    Donc, oui, pour calculer la matrix de l'espace tangent il faut passer par la position des vertice et de leurs coordonnées de texture.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 208
    Par défaut
    Salut icer, merci pour ta réponse !

    D'acc, alors du coup, j'ai calculé mes tangentes / binormales pour chacune de mes faces, mais maintenant je suis face à une petite question : certains sommets appartenant à plusieurs faces se retrouvent avec des tangentes / binormales différentes suivant la face sur laquelle je les calcule.

    Ce qui ne m'arrange pas, aux vues de mon tableau d'indices ^^

    J'obtiens mon tableau d'indices en fonction des coordonnées de sommet, coordonnées de texture, et normales.
    Si un sommet à l'un de ces paramètres différents des autres, alors il est dupliqué (et un nouvel indice est créé).

    Du coup, pour un plan, composé de deux triangles, j'ai les indices suivants :

    0,1,2,2,3,0
    Pour la première face (0,1,2), j'ai la tangente suivante : [1,0,1] .
    Pour la seconde face (2,3,0), j'ai la tangente suivante : [-1,0,-1] .

    Est ce normal?
    Ça n'aurait pas déjà du être géré lorsque j'ai sorti mes indices en fonction des normales / positions / coordonnées de texture?

  4. #4
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    Bonjour,

    Normalement, si les deux triangles appartiennent au même plan, la tangente doit être la même.

    Pour la première face (0,1,2), j'ai la tangente suivante : [1,0,1] .
    Pour la seconde face (2,3,0), j'ai la tangente suivante : [-1,0,-1] .
    La tangente est inversée pour le second triangle. Probablement les vertice n'ont pas été traitées dans le même ordre, qui est en générale le sens anti-horaire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 208
    Par défaut
    En fait je suis juste un gros boulet

    Les valeurs que je prenais pour mes positions de sommet étaient fausses : j'ai oublié de multiplié l'indice par le nombre de données composant un sommet.
    Erreur bête et méchante ^^

    Du coup voici ce que ça donne :



    Ça semble pas trop mal, non?

  6. #6
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    L'éclairage du dès est très cohérent.

Discussions similaires

  1. question sur l'espace mémoire
    Par Topeur dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 28/02/2008, 08h59
  2. [Std::map] Question sur les clés
    Par Kreeg dans le forum SL & STL
    Réponses: 1
    Dernier message: 26/02/2008, 22h32
  3. Question sur les specular maps
    Par funkydata dans le forum DirectX
    Réponses: 6
    Dernier message: 15/06/2006, 08h47
  4. Réponses: 3
    Dernier message: 03/04/2006, 15h38
  5. Questions sur les Map
    Par djobanaille dans le forum C++
    Réponses: 3
    Dernier message: 12/12/2005, 09h41

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