Texture openGl [Résolu]

Signaler
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008
-
Messages postés
66
Date d'inscription
jeudi 6 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2006
-
Bonjour tout le monde,



j'essaye désespérément d'ajouter des textures dans mon projet openGl,
mais je devient fou... J'ai écrit une classe qui me permet de charger
des fichiers tga (elle fonctionne). Lors de mon initialisation je cré
donc ma texture:



<hr size= "2" width="100%">CTGAFile* ptgaFile = new CTGAFile("nom de fichier");



glGenTextures(1, &id);

glBindTexture(GL_TEXTURE_2D, id);

glTexImage2D(GL_TEXTURE_2D, 0, 3, ptgaFile->getWidth,
ptgaFile->getHeight, 0, GL_RGB, GL_UNSIGNED_BYTE,
ptgaFile->getPixels());

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

glEnable(GL_TEXTURE_2D);

<hr size ="2" width="100%">

Puis lors du rendu:

<hr size="2" width="100%">glBindTexture(GL_TEXTURE_2D, id);

<hr size="2" width="100%">

J'ai regardé plusieurs tutoriaux, et normalement mon code devrait fonctionner, enfin selon moi...

Le seul moyen que j'ai trouvé pour obtenir des résultat est de refaire
toute l'étape d'initialisation avant chaque rendu, mais c'est pas super
lol... En fait je n'ai pas l'impression que openGl mémorise ce que je
fait avec le glBindTexture...



D'où viend ce problème ?


neodelphi

4 réponses

Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
J'imagine que dans tous mes conseils il y en aura pas mal que tu auras deja vu mais pour une texture ,

glShadeModel(GL_FLAT); (en tout cas je crois) doit etre mis apres glEnable(GL_TEXTURE_2D);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); avant glEnable(GL_TEXTURE_2D);

et apres on met glBegin(GL_QUADS);

glTexCoord2f(1, 0); glVertex3f(-2.0, -1.0, 0.0);

glTexCoord2f(0, 1); glVertex3f(-2.0, 1.0, 0.0);

glTexCoord2f(1, 1); glVertex3f(0.0, 2.0, 0.0);

glTexCoord2f(1, 0); glVertex3f(0.0, -1.0, 0.0);

glEnd();

pour afficher un carré texturé ...

le glTexCoord2f permet de choisir ou la texture doit etre prise

0,0 1,0

________

| -- --|

| | |(texture a l'endroit)

| | |

--------

0,1 1,1



0,1 1,1

________

| -- --|

| | |(texture a l'envers)

| | |

--------

0,0 1,0



pour plus de renseignement voir tous les tutos sur les textures ...
rrk275
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Salut.

Le seul moyen que j'ai trouvé pour obtenir des résultat est de refaire toute l'étape d'initialisation avant chaque rendu, mais c'est pas super lol... En fait je n'ai pas l'impression que openGl mémorise ce que je fait avec le glBindTexture...
Cela veut donc dire qu'il y a quelque chose que tu fais lors de l'initialisation que tu ne fais pas ensuite pour ton rendu comme par exemple glEnable(GL_TEXTURE_2D); (besoin que d'un seul appel mais bon c'est pour l'exemple).
J'ai du mal a croire que cela vienne d'OpenGL.

rrk275-> glShadeModel(GL_FLAT); n'a rien avoir avec les textures
L'ordre d'appel entre glEnable(GL_TEXTURE_2D); et glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); ne change rien du tout, OpenGL est une machine a état, l'ordre est important pour les méthodes de rendu de géométrie...

KeniiyK.
Messages postés
442
Date d'inscription
jeudi 4 avril 2002
Statut
Membre
Dernière intervention
11 août 2008

Merci pour vos réponses... Je viend de trouver d'où viend mon problème:
j'effectuait l'initialisation de la texture avant de faire
glXMakeCurrent(pdisplay, window, context);... Je commençai a devenir
dingue, j'ai trouvé le problème en fesant des printf des id de texture
que me renvoyai openGl... Bref ça marche.


neodelphi
Messages postés
66
Date d'inscription
jeudi 6 octobre 2005
Statut
Membre
Dernière intervention
18 janvier 2006

Et oui rien ne vaut un bon debugage avec du printf "en veut tu en voila"

C U Later
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 + 1 = 1, c'est l'harmonie parfaite (citation de J-C Van-Dame)
Vive la logique: 1 ou 1 ça fait bien 1 : pas si fou que ça JC ;)