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 :

comment générer automatiquement les coordonnées d'une texture


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut comment générer automatiquement les coordonnées d'une texture
    Bonjour,
    Existe t-il une méthode pour générer automatiquement les coordonnées (u,v) d'une texture? càd, au lieu d'indiquer à chaque fois les texcoords, y a t-il une astuce pour plaquer la texture sans indiquer les coordonnées?

  2. #2
    Membre habitué Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Points : 177
    Points
    177
    Par défaut
    glTexGen est faite pour toi

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Merci Harooold, j'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Texturing Contour Anchored To The Object
    		gl.glTexGeni(GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR);
    		// Texturing Contour Anchored To The Object
    		gl.glTexGeni(GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR);
    		gl.glEnable(GL.GL_TEXTURE_GEN_S); // Auto Texture Generation
    		gl.glEnable(GL.GL_TEXTURE_GEN_T);
    Mais parfois j'ai un rendu bizare : j'ai de bonnes textures pour les faces d'avant et d'arrière alors que les faces gauche et droite ont une texture bizare. C'est quoi le problème?

  4. #4
    Membre habitué Avatar de Harooold
    Homme Profil pro
    Ingénieur 3D temps réel
    Inscrit en
    Mars 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 136
    Points : 177
    Points
    177
    Par défaut
    Ce n'est pas bizarre mais normal

    OpenGL génere les coordonées grace à 4 plans ( un pour chaque coordonée ), que tu peux redéfinir et qui sont par défaut :
    planex = { 1., 0., 0., 0. }
    planey = { 0., 1., 0., 0. }
    planez = { 0., 0., 1., 0. }
    planew = { 0., 0., 0., 1. }

    Tu prends un point, tu regardes la distance à planex, ça te donnes la coordonée de texture s de ce point, planey pour t, planez pour r et planew pour q.

    Mais quand tu bosses avec des textures 2D tu ne vas génerer les coordonées que pour s et t, donc tu auras un plaquage 2D, du coup affichage correct sur avant et arriere et clamp de la texture sur les cotés.

    Je ne pense pas qu'on puisse génerer automatiquement un plaquage de texture en 3D, ou alors il y a un truc qui m'a échappé avec glTexGen :p

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    T'as pas un exemple de code d'utilisation de glTexGen stp?

    J'ai utilisé ce code mais maintenant uniquement les faces de droites et gauche ayant des bonnes textures, les autres non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    gl.glTexGeni(GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR);
    		gl.glTexGenfv(GL.GL_S, GL.GL_OBJECT_PLANE, planex,0);
     
     
    		gl.glTexGeni(GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR);
    		gl.glTexGenfv(GL.GL_T, GL.GL_OBJECT_PLANE, planey,0);
     
    		gl.glTexGeni(GL.GL_R, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR);
    		gl.glTexGenfv(GL.GL_R, GL.GL_OBJECT_PLANE, planez,0);
     
    gl.glEnable(GL.GL_TEXTURE_GEN_S); // Auto Texture Generation
    		gl.glEnable(GL.GL_TEXTURE_GEN_T);
    		gl.glEnable(GL.GL_TEXTURE_GEN_R);

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    J'ai pu appliquer glTexGen pour générer automatiquement des textures 2D.
    Mais j'ai obtenu des textures inclinées ce qui donne un rendu pas réaliste.
    Comment corriger ça?
    Merci.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Aucune réponse??????

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Et pourquoi ne pas le faire "à la main" au lieu de chercher quelque chose d'automatique qui ne te convient pas ?

    C'est pas plus long de le faire "à la main", mais tout dépend de tes besoins de base bien entendu.

  9. #9
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 198
    Points
    5 198
    Par défaut
    Citation Envoyé par choko83 Voir le message
    J'ai pu appliquer glTexGen pour générer automatiquement des textures 2D.
    Mais j'ai obtenu des textures inclinées ce qui donne un rendu pas réaliste.
    Comment corriger ça?
    Merci.
    tu peux jouer avec la matrice de texture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glMatrixMode(GL_TEXTURE);
    à partir de là tu appliques rotation / translation comme pour un polygone

    c'est plutot de la bidouille vu comme ça mais bon, ça rejoint visiblement ce que tu fais
    pour quelque chose de propre, je rejoint Ti-R en te conseillant d'utiliser un outil adapté (modeleur)

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Moi je veux utiliser des textures automatiques pour alleger et optimiser ma Base de Données. Si non, je crois qu'il faut faire un algorithme??????

  11. #11
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 198
    Points
    5 198
    Par défaut
    tu peux effectivement appliquer un algorithme de génération automatique des coordonnées de textures à partir des sommets ou des normales ou les 2 mais glTexGen le fait normalement très bien, il faut que tu trouves les bons paramètres
    je ne pense pas qu'à partir d'un algorithme tu puisses obtenir de meilleurs résultat mais je me trompe peut-etre

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Voila le code que j'utilise pour générer automatiquement une texture:
    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
     
     
    float ObjPlaneS[] = { 1.0f, 0.0f, 1.0f, 0.0f };
    		float ObjPlaneT[] = { 0.0f, 1.0f, 0.0f, 0.0f };
    		float ObjPlaneR[] = { 0.0f, 0.0f, 1.0f, 0.0f };
    		float ObjPlaneQ[] = { 0.0f, 0.0f, 0.0f, 1.0f };
     
     
                              gl.glEnable(GL.GL_TEXTURE_GEN_S); 
    		gl.glEnable(GL.GL_TEXTURE_GEN_T);
    		gl.glEnable(GL.GL_TEXTURE_GEN_R);
    				gl.glTexGeni( GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR );
    		gl.glTexGeni( GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR );
    		gl.glTexGeni( GL.GL_R, GL.GL_TEXTURE_GEN_MODE, GL.GL_OBJECT_LINEAR );
    				gl.glTexGenfv(GL.GL_S, GL.GL_OBJECT_PLANE, ObjPlaneS,0);
    		gl.glTexGenfv(GL.GL_T, GL.GL_OBJECT_PLANE, ObjPlaneT,0);
    		gl.glTexGenfv(GL.GL_R, GL.GL_OBJECT_PLANE, ObjPlaneR,0);
    J'obtient une texture impécable pour les quads mais une texture inclinée pour les triangles et les polygones.

  13. #13
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 198
    Points
    5 198
    Par défaut
    Il n'y aurait pas un problème avec ton plan pour les coordonnées S ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float ObjPlaneS[] = { 1.0f, 0.0f, 1.0f, 0.0f };
    j'ai aussi l'impression que tu te complique la vie, d'une part avec 3 coordonnées (S,T, et R) d'autre part avec des plans

    si tu regardes sur nehe une solution simple tiré du tuto 15 (Texture Mapped Outline Fonts) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Texturing Contour Anchored To The Object
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    // Texturing Contour Anchored To The Object
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    // Auto Texture Generation
    glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
    ou la même chose en sphérique adapté à partir du tuto 23 (Sphere Mapping Quadrics In OpenGL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Texturing Contour Anchored To The Object
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
    // Texturing Contour Anchored To The Object
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
    // Auto Texture Generation
    glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
    edit :
    The R and Q coordinates are usually ignored. The Q coordinate can be used for advanced texture mapping extensions, and the R coordinate may become useful once 3D texture mapping has been added to OpenGL, but for now we will ignore the R & Q Coords. The S coordinate runs horizontally across the face of our polygon, the T coordinate runs vertically across the face of our polygon.
    En gros, les coordonnées R et Q sont généralement ignorées.
    La coordonnée Q peut être utilisée pour de la génération avancée de coordonnées de texture et la coordonnée R ne devient utile qu'avec des textures en 3 dimensions.
    La coordonnée S évolue sur l'axe horizontal des polygones de l'objet tandis que la coordonnée T évolue sur l'axe vertical (il ne faut pas oublier que, bien qu'évoluant dans un espace en 3 dimensions, les polygones restent des surfaces en 2 dimensions).

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    Il n'y aurait pas un problème avec ton plan
    si tu regardes sur nehe une solution simple tiré du tuto 15 (Texture Mapped Outline Fonts) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Texturing Contour Anchored To The Object
    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    // Texturing Contour Anchored To The Object
    glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
    // Auto Texture Generation
    glEnable(GL_TEXTURE_GEN_S);
    glEnable(GL_TEXTURE_GEN_T);
    J'ai déjà utilisé ce code de NEHE mais il donne un rendu trés étrange. Je suis obligé d'utiliser les vecteurs plan pour avoir un rendu plus réaliste.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    j'ai un autre problème, j'utilise la texture automatique pour une face de mon cube. Et je la désactive avec les instructions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gl.glDisable(GL.GL_TEXTURE_GEN_S); 
    gl.glDisable(GL.GL_TEXTURE_GEN_T);
    Mais les autres faces du cube seront influencé par cette textures. Par exemple, j'ai plaqué une texture de brique sur deux faces de mon cube, les autres faces auront la couleur rouge. Et si je plaque une texture de brique vert sur les deux faces concernées, les autres faces du cube auront la couleur verte.
    Qu'est ce que je fais sachant que j'ai bien désactivé la texture automatique aprés l'avoir plaqué sur mes deux faces concernées.

Discussions similaires

  1. WebGL : Générer les coordonnées d'une sphère et contrôler la avec la souris
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 17/07/2013, 22h59
  2. Réponses: 1
    Dernier message: 10/07/2013, 17h07
  3. [impoint] Comment enregistrer automatiquement les coordonnées du point
    Par Flaherty Mc Coillean dans le forum Images
    Réponses: 2
    Dernier message: 29/08/2011, 13h19
  4. Comment lire les pixels d'une texture en memoire
    Par Syl_20 dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/04/2010, 18h10

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