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 :

inverser (flip) une texture


Sujet :

OpenGL

  1. #1
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut inverser (flip) une texture
    bonjour à tous,

    j'ai une texture opengl que je dessine avec des appels à glTexCoord et glVertex.

    comment faire une inversion, un "flip" de l'image selon l'axe x ou y ?

    j'ai essayé avec glScale et glZoomPixel, mais sans succès. ca ne doit pas etre fait pour les texture? je précise que je commence à peine l'opengl.

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  2. #2
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Points : 486
    Points
    486
    Par défaut
    Salut,

    il te suffit d'inverser les coordonnées passées à glTexCoord.

    Par exemple avec un carré:
    Normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    glBegin(GL_QUADS);	
    	glTexCoord2i(0, 0);  // Bottom left 
    	glVertex3i(0, 0, 0);
     
    	glTexCoord2i(1, 0);	// Bottom right
    	glVertex3i(10, 0, 0);
     
    	glTexCoord2i(1, 1);  // Top right
    	glVertex3i(10, 10, 0);
     
    	glTexCoord2i(0, 1);  // Top left
    	glVertex3i(0, 10, 0);			
    glEnd();
    Inverser la texture selon X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    glBegin(GL_QUADS);	
    	glTexCoord2i(0, 0);  // Bottom left 
    	glVertex3i(0, 0, 0);
    
    	glTexCoord2i(-1, 0);	// Bottom right
    	glVertex3i(10, 0, 0);
    
    	glTexCoord2i(-1, 1);  // Top right
    	glVertex3i(10, 10, 0);
    
    	glTexCoord2i(0, 1);  // Top left
    	glVertex3i(0, 10, 0);			
    glEnd();

  3. #3
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    salut,

    oui c'est vrai j'ai oublié de préciser que j'avais trouvé cette solution, mais en fait j'ai une fonction Draw() qui utilise toujours les memes points.

    et donc je voulais savoir si je pouvais éviter modifier cette fonction (que je n'ai pas écrite) en Draw(bool inverserSelonX, bool inverserSelonY) -> ce qui serait dommage car je n'ai qu'une seule texture à inverser ^^

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    tu peut le faire très facilement en faisant un scale de -1 sur l'axe X de la matrice de texture
    ça donne un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glMatrixMode(GL_TEXTURE);
    glLoadIdentity();
    glScalef(-1,1,1);
    glMatrixMode(GL_MODELVIEW);
    Draw();
    et voila
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre éclairé
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Points : 810
    Points
    810
    Par défaut
    K nickel je vais défaire mes modifs et tester ca

    a+

    Débugger du code est deux fois plus dur que d'en écrire.
    Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.

  6. #6
    Membre actif
    Avatar de Fabien Henon
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 226
    Points
    226
    Par défaut
    Citation Envoyé par mamelouk Voir le message
    salut,

    oui c'est vrai j'ai oublié de préciser que j'avais trouvé cette solution, mais en fait j'ai une fonction Draw() qui utilise toujours les memes points.

    et donc je voulais savoir si je pouvais éviter modifier cette fonction (que je n'ai pas écrite) en Draw(bool inverserSelonX, bool inverserSelonY) -> ce qui serait dommage car je n'ai qu'une seule texture à inverser ^^
    Pour ça si tu codes en C++ tu pourrais faire une fonction Flip qui appellera une fonction Draw(bool inverserSelonX, bool inverserSelonY) qui est privée dans ta classe, et ta fonction Draw appellerait aussi cette fonction privée Draw(bool inverserSelonX, bool inverserSelonY) mais en mettant false.

    De cette manière tu gardes ta simplicité tout en étant plus flexible (bien sûr je ne prétends pas que cette méthode serait meilleurs qu'une autre, mais elle fonctionnerait plutôt bien dans ton cas)
    Soft Creations - FirmLife

    Soft Creations: Blog de Fabien Henon et site de prestations de sites web et applications mobiles
    FirmLife: Le nouveau jeu de gestion d'entreprises en ligne

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/12/2014, 09h48
  2. comment modifier une texture?
    Par tibyann dans le forum DirectX
    Réponses: 6
    Dernier message: 16/06/2004, 15h27
  3. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 17h16
  4. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 14h57
  5. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31

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