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 :

Texture


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut Texture
    Bonjour à tous!

    Je mène actuellement un projet où j'utilise Opengl et Qt. En fait j'ai une fenetre opengl ou je voudrais texturer un objet mais un seul parmi tous ceux presents or lorsque je palque ma texture celle-ci apparait bien comme je lui ai demandé mais sa couleur se mélange avec les autres objets. En résumé j'ai donc un objet texturé et des objets comme "polués" par cette texture. j'ai essayé de résoudre le probleme en plaquant aux objets qui ne doivent pas etre texturés une texture blanche. ça marche au début mais des que je bouge la scene le proble me revien. Voici le bou de code que j'utilise pour plaquer ma texture:

    glColor3f(1, 0, 0);
    glBegin(GL_TRIANGLES);
    glVertex2f(-0.5, -1);
    glVertex2f(0.5, -1,);
    glVertex2f(0, -0.5);
    glEnd();

    glColor3f(1, 1, 0);

    glBindTexture(GL_TEXTURE_2D, textures[numTex]);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    glBegin(GL_POLYGON);
    glTexCoord2d(0, 0); glVertex2f(-0.5, -0.5);
    glTexCoord2d(1, 0); glVertex2f(0.5, -0.5);
    glTexCoord2d(1, 1); glVertex2f(0.5, 0.5);
    glTexCoord2d(0, 1); glVertex2f(-0.5, 0.5);
    glEnd();

    textures correspond a mon tableau de noms de textures

    Aidez moi SVP

  2. #2
    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
    Salut,

    normalement il suffit de faire un glEnable(GL_TEXTURE_2D) avant de dessiner ton objet texturé, puis juste après cet objet un glDisable(GL_TEXTURE_2D).

    D'un point de vue performance, si tu as plusieurs objets texturés essaie de les grouper pour minimiser les glEnable / glDisable.

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut
    Ok merci ça marche. Par contre j'aurais pas pensé a ça parce que je pensais que le fait d'appeler glDisable(GL_TEXTURE_2D) disait a opengl d'arreter d'utiliser ds textures et donc qu'il n'y aurait plus d'objets texturés. D'autre part sur tous les tutoriaux parcourus a chaque fois le glEnable se trouvait dans l'initialisation d'opengl et ap on n'y touchait plus. endin en tout cas merci.

    maintenant que ce cote la est résolu je vais en profiter pour vous posez quelques questions (tjs sur les textures):

    1 - je code en c++ et j'ai donc entre autres une classe pour l'opengl et une classe pour mes objets. avant l'utilisation de textures depuis ma methode de dessin dans ma classe opengl j'appelais la methode de dessin de la classe Objet. or avec les coord de texture ça semble ne pas vouloir marcher et j'ai du mettre mon code dans la fonction de dessin opengL. Savez vous pkoi?

    2 - j'utilise une dizaine de textures differentes et pour chaque texture j'ai les meme parametres definit par glTexparameter est ce que je pourrais y mettre qu'une seule fois pour la premiere texture et ensuite ça fait comme un effet ricochet sur les autres ou est ce qu'il faut y specifier a chaque fois av l'appel de glTexImage2D ?

    3 - les textures que j'utilise sont comme des etiquettes que l'on collerait sur des objets. mes textures sont carres et je voudrais pouvoir coller ses "etiquettes" sur n'importe quel objet quel que soit sa forme (carre, rectangle, cercle, cylindre,, triangle, ...) Savez-vous si c'est possible et si oui comment faire. D'autres part lorsque je plaque ma texture sur un carré ça c'est bon mais comment faire pour reduire sa taille et faire en sorte que sa couleur ne soit pas influencée par la couleur de l'objet et que l'espace de l'objet non occupé par la texture garde sa couleur d'origine.


    Voila. Je sais ça fait un peu beaucoup. Le plus urgent c la question 3 les deux autres sont des questions que je me pose afin de savoir si je peux reduire la taille de mon code et l'ameliorer.

    Merci d'avance pour votre aide.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    1) Je suis pas sur d'avoir compris. C'est que tu faisait des glTexCoord avant ta méthode draw de l'objet ? Donc ceci ce trouvait peut être hors du bloc glBegin() glEnd() et ce serai la raison qu'il ne soit pas pris en compte.

    2) Si j'ai compris la doc, la fonction glTexParameters peut prendre un tableau d'identifiant de texture ( je suis pas sur d'avoir compris la doc, sur le coup ). Ainsi si tu passe ton tableau contenant les identifiants de textures, en un appel , toute les textures prendrant les mêmes caractéristiques.
    Sinon, si la fonction ne prend pas d'identifiant ça veut dire qu'elle applique les paramètres à toute les textures quoiqu'il arrive ( m'etonnerai ).

    3) Essaie de mettre un glColor3f(1,1,1); avant d'applique la texture. Après, la texture ne prendre plus la couleur de l'objet.
    Après tu dois pouvoir jouer avec les glTexCoords() pour arriver à placer tes étiquettes comme tu veux. certes c'est toujours dans une echelle [0 ; 1] mais si tu fais sur un carré l'application de la texture avec comme limites [0.2 ; 0.8 ] tu perd certes un peu de la texture, mais elle doit grossir un peu.
    Sinon y a une fonction pour le redimenssionnement de texture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut
    Bonjour, tout d'abord merci d'avoir répondu.

    Pour le 1) je suis bien dans mon bloc glBegin glEnd la seule chose c'est que je fais ce bloc dans une autre classe que la classe OpenGL.

    2) je ne suis pas sur d'avoir compris mais en tout cas c'est sur pas d'effets ricochets les parametres des textures doivent etre repetes pour chaque texture.

    3) en utilisant glColor3f(1, 1, 1) en effet la couleur de l'objet n'influence pas la texture mais en charchant un peu j'ai trouvé
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    qui fait la meme chose.
    Reste le probleme de placer ,mes textures comme je veux. LittleWhite tu as parlé d'une fonction de redimensionnement pourrais tu m'en dire plus. actuellement j'utilise la matrice de texture avec un glScale pour redimenssionnner ma texture. daonc en faisant glScalef(2, 2, 0) j'obtiens 4 fois la texture et avec
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
    GL_CLAMP_TO_BORDER);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
    GL_CLAMP_TO_BORDER);*
    seule celle dans le coin inferieur gauche apparait mais le reste de la face est noire. Comment faire pour que ça garde la couleur de l'objet??
    Autre chose comment plaquer une texture rectangulaire sur un triangle cercle ou cylindre??? Est ce possible avec OpenGL??

    Aidez moi svp

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    1) Que tu sois dans des classes ou pas, l'ordre qu'il faut garder c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glBegin(flag);
    {
             glColor3f();
             glVertex3();
    }glEnd();
    De toute façon, OpenGL ne verra que ses fonctions, il se fout complètement du reste.

    2) Je pense qu'on peut faire qu'un seul appel au fonction, en utilisant glTexParameteriv ( la variante avec le pointeur )
    Par contre il faut avoir tout les identifiers de texture dans un tableau ( pas très difficile ) et après tu peux passer ce pointeur ( sur le tableau ) à la fonction, et hop le tour est joué.

    3) Pour le redimensionnement je parlais de gluScaleImage... mais je suis très incertain que se soit ce que tu veux.
    Par contre, le glScale ne doit pas affecter la texture appliqué sur un objet; exemple, si tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         glTexCoords2f(0, 0);
         glTexCoords2f(0, 1);
         glTexCoords2f(1, 1);
         glTexCoords2f(1, 0);
    Ta texture ne sera appliqué qu'une fois ( sans wrap ni rien ) et ce tout le temps.Le gluScale va juste toucher au glVertex()

    Pour les triangles, c'est simple d'appliquer les textures, juste en jouant avec les glTexCoords()
    Par contre pour les cylindres et cercle ( et autre forme ) si c'est toi qui fait tout les points à la main, cela reste avec glTexCoords, et je sais pas trop comment on defini ( fonction mathématique ? )
    Sinon, si tu utilise les fonction de GLU, ou de GLUT, les glTexCoords sont près et y a juste à dire d'appliquer la texture
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13
  2. 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
  3. appliquer des textures de taille 2n+1
    Par Katsuo chris dans le forum DirectX
    Réponses: 4
    Dernier message: 14/11/2002, 00h11
  4. Mosaïque texturée
    Par Pode dans le forum OpenGL
    Réponses: 5
    Dernier message: 19/09/2002, 09h50
  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