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 :

Textures et coordonnées inversées ?


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
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut Textures et coordonnées inversées ?
    Je dois appliquer tout bêtement une texture sur une surface carrée. J'ai récupérée des sources qui me montrent comment faire. Je programme en java avec JOGL.

    Cependant, sans comprendre pourquoi, pour que l'image s'affiche à l'endroit sur mon ordinateur, je dois changer les coordonnées des glTexCoords, comme si je n'avais pas les mêmes axes que tout le monde.

    Voici le code que je croyais bon :

    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
    gl.glPushMatrix();
    gl.glEnable(gl.GL_TEXTURE_2D);
    gl.glBindTexture(gl.GL_TEXTURE_2D, texturePlateau);
     
    gl.glBegin(gl.GL_QUADS);
     
    gl.glTexCoord2f(0.0f, 0.0f);
    gl.glVertex3f(0.0f, 0.0f, 0.1f);
     
    gl.glTexCoord2f(1.0f, 0.0f);
    gl.glVertex3f(1.0f, 0.0f, 0.1f);
     
    gl.glTexCoord2f(1.0f, 1.0f);
    gl.glVertex3f(1.0f, 1.0f, 0.3f);
     
    gl.glTexCoord2f(0.0f, 1.0f);
    gl.glVertex3f(0.0f, 1.0f, 0.1f);
     
    gl.glEnd();
     
    gl.glDisable(gl.GL_TEXTURE_2D);
    gl.glPopMatrix();
    Si je fais cela, mon image est à l'envers... Voici le code que j'ai du mettre pour avoir un affichage correct :

    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
     
            gl.glPushMatrix();
            gl.glEnable(gl.GL_TEXTURE_2D);
            gl.glBindTexture(gl.GL_TEXTURE_2D, texturePlateau);
     
            gl.glBegin(gl.GL_QUADS);
     
            gl.glTexCoord2f(0.0f, 1.0f);
            gl.glVertex3f(0.0f, 0.0f, 0.1f);
     
            gl.glTexCoord2f(1.0f, 1.0f);
            gl.glVertex3f(1.0f, 0.0f, 0.1f);
     
            gl.glTexCoord2f(1.0f, 0.0f);
            gl.glVertex3f(1.0f, 1.0f, 0.3f);
     
            gl.glTexCoord2f(0.0f, 0.0f);
            gl.glVertex3f(0.0f, 1.0f, 0.1f);
     
            gl.glEnd();
     
            gl.glDisable(gl.GL_TEXTURE_2D);
            gl.glPopMatrix();
    Il n'y a pas de glRotate avant ce bout de code. Mon image n'est pas enregistrée à l'envers sur le disque dur. Quelqu'un sait-il d'où vient mon problème ?

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    Je n'ai pas eu le tps de regarder ton code attentivement mais il faut savoir qu'une image a son propre systeme de coordonnées :


    0,1________
    | |
    | |
    |_________|
    0,0 1,0

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Ok c'est exactement ce que j'allais demandé. J'ai l'impression que les axes d'images sont tels que l'origine est en haut à gauche et non pas en bas à gauche. Pourtant on m'avait dit l'inverse... Mais enfin bon, au moins j'ai compris désormais.

    Merci !

    edit :

    Ah bah je viens de relire ton message et finalement je n'y comprend plus rien. Où est l'origine pour une texture ? En bas à gauche ou bien en haut à gauche ? Pourquoi mon programme se comporte-t-il comme si elle était en haut à gauche ?
    Est-ce que cela vient du chargement de la textures ?

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Et pendant que j'y suis avec ces histoires de coordonnées, j'ai activé le CullFace pour justement repérer facilement lorsque j'affiche les faces du mauvais sens.

    Je me suis rendu compte que j'affichais toutes les faces à l'envers.

    Dans quel sens faut-il créer les Vertex ?

    Pour qu'une face soit visible en face de la caméra, je dois les mettre dans le sens inverse des aiguilles d'une montre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gl.glVertex3f(0.0f, 0.0f, 0.0f);
    gl.glVertex3f(1.0f, 0.0f, 0.0f);
    gl.glVertex3f(1.0f, 1.0f, 0.0f);
    gl.glVertex3f(0.0f, 1.0f, 0.0f);
    Si je fais dans l'autre sens, alors je dois tourner la caméra pour voir la face.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    J'ai changé le FrontFace en le forcant à l'initialisation à la valeur ClockWise ( gl.glFrontFace(gl.GL_CW) ) et désormais mes faces d'affichent bien elles le devraient. Comment se fait-il que CW ne soit pas la valeur par défaut ?!

    Par ailleurs, mes experiences me prouvent que dans l'état actuel de mon programme, l'origine d'une texture se trouve en haut à gauche, et non pas en bas à droite comme cela est écrit dans les cours et tutoriaux openGL. Là encore, pourquoi n'ai je pas le paramètrage par défaut ?

    Est-ce une particularité de JOGL ? Je vous remercie.

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Comment se fait-il que CW ne soit pas la valeur par défaut ?!
    Je pense que ca vient des maths, tout simplement. En Maths le sens "anti-horaire" (aussi appelé sens trigonométrique) est celui privilégié. Je pense que quand OpenGL a été créé il a bien fallu choisir un sens et ils ont pris le plus utilisé en maths, vu qu'OpenGL, c'est des maths

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    , mes experiences me prouvent que dans l'état actuel de mon programme, l'origine d'une texture se trouve en haut à gauche, et non pas en bas à droite comme cela est écrit dans les cours et tutoriaux openGL
    Une texture en OpenGL est paramétrée en (U, V), avec (0,0) = coin INFERIEUR GAUCHE. Je ne sais pas où tu as lû que c'était sensé être en bas à droite mais c'est faux (ou alors j'ai mal compris tes explications

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Par défaut
    Je n'ai pas eu le tps de regarder ton code attentivement mais il faut savoir qu'une image a son propre systeme de coordonnées :

    0,1 1,1
    _________
    | |
    | |
    |_________|
    0,0 1,0

    Il faut faire attention à cela...

  8. #8
    Membre éprouvé Avatar de razmott
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Par défaut
    Salut !

    J'ai une hypothèse, mais il faut vérifier :
    non seulement OpenGL a un système de coordonnées "inversé" pour les textures mais il les charge aussi à l'envers. Je m'explique, le tableau de pixel que tu envoie à glTexImage2D ou glTexSubImage2D décrit les pixels du coin inférieur gauche jusqu'au coin supérieur droit.

    Cependant, ce n'est qu'un souvenir, c'est donc à vérifier.

    Bon coding !
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/03/2011, 14h07
  2. Coordonnées de texture 'en live'
    Par KnightCoder dans le forum DirectX
    Réponses: 8
    Dernier message: 30/08/2007, 17h28
  3. Réponses: 6
    Dernier message: 28/11/2006, 19h12
  4. Textures résidentes et coordonnées
    Par f56bre dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 23/10/2006, 01h35
  5. Index et coordonnées de texture
    Par atalmapi dans le forum DirectX
    Réponses: 3
    Dernier message: 15/03/2005, 01h02

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