Texture openGl

Résolu
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008 - 18 déc. 2005 à 12:57
ekinox17 Messages postés 66 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 18 janvier 2006 - 26 déc. 2005 à 13:29
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

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
18 déc. 2005 à 16:37
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
3
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
20 déc. 2005 à 14:38
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.
3
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
26 déc. 2005 à 12:06
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
0
ekinox17 Messages postés 66 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 18 janvier 2006
26 déc. 2005 à 13:29
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 ;)
0
Rejoignez-nous