OpenGl et textures

ben401

Membre enregistré
9 Octobre 2004
8
0
Bonjour à vous. Le problème que je rencontre est que je n'arrive pas à appliquer une textures sur une forme rectangulaire dans mon application Cocoa avec l'OpenGL. Je m'explique un peu mieux, je dessine grace à OpenGl plusieurs rectangles auxquels je veux appliquer une texture. Voici le code de ma fonction DrawRect:

- (void)drawRect:(NSRect)rect {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity();
int i;
glTranslatef(-1.05f,0.0f,0.0f);
glBindTexture( GL_TEXTURE_2D, texture[ 0 ] );


for(i=0; i<6; i++) {
glTranslatef(0.28f,0.0f,0.0f);
glRotatef(angle-300,1.0f,0.0f,1.0f);
glBegin(GL_QUADS);
glTexCoord2f( 0.0f, 1.0f );
glVertex3f(0.0f, 0.75f, 0.0f); // Top Left
glTexCoord2f( 1.0f, 1.0f );
glVertex3f( 0.14f, 0.75f, 0.0f); // Top Right
glTexCoord2f( 1.0f, 0.0f );
glVertex3f( 0.14f,0.25f, 0.0f); // Bottom Right
glTexCoord2f( 0.0f, 0.0f );
glVertex3f(0.0f,0.25f, 0.0f); // Bottom Left
glEnd();
}

if (angle==300) {
glLoadIdentity();
glTranslatef(-0.9f,-1.0f,0.0f);
glBegin(GL_QUADS);
glVertex3f(0.0f, 0.75f, 0.0f); // Top Left
glVertex3f( 1.8f, 0.75f, 0.0f); // Top Right
glVertex3f( 1.8f,0.25f, 0.0f); // Bottom Right
glVertex3f(0.0f,0.25f, 0.0f); // Bottom Left
glEnd();
}

glFlush();
}


le code pour importer la texture (en bmp) a été copié-collé du tutorial 6 Cocoa de chez NeHe ( en changeant juste l'emplacement et le nom du fichier). Mais mon probleme est que les rectangles restent désespérément blanc. J'ai pourtant acctiver le mapping de texture dans mon initGL...
Est-ce que quelqu'un aurait une idée? Merci d'avance.
 
Sur les anciennes cartes graphiques, la taille des textures doit être une puissance de 2.
 
pt etre qui te manque un glEnable(GL_TEXTURE_2D); !?

maj: oups pt etre que je ferai bien de lire la fin du msg avant de repondre :rateau:
""j 'ai pourtant acctiver le mapping de texture dans mon initGL... ""
 
_gael a dit:
pt etre qui te manque un glEnable(GL_TEXTURE_2D); !?

maj: oups pt etre que je ferai bien de lire la fin du msg avant de repondre :rateau:
""j 'ai pourtant acctiver le mapping de texture dans mon initGL... ""

Il me semble que de toutes façons, il faut le faire à chaque fois.
 
Bloc de code:
- (void)drawRect:(NSRect)rect
{
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // Clear The Screen And The Depth Buffer
	glLoadIdentity();
	int i;
	glTranslatef( -1.05f, 0.0f, 0.0f);
	
	glEnable( GL_TEXTURE_2D );
	glBindTexture( GL_TEXTURE_2D, texture[ 0 ] );

	for( i=0; i<6; i++ )
	{
		glTranslatef( 0.28f, 0.0f, 0.0f);
		glRotatef( angle - 300, 1.0f, 0.0f, 1.0f );
		glBegin(GL_QUADS);
			glTexCoord2f( 0.0f, 1.0f );
			glVertex3f( 0.0f, 0.75f, 0.0f ); // Top Left
			glTexCoord2f( 1.0f, 1.0f );
			glVertex3f( 0.14f, 0.75f, 0.0f ); // Top Right
			glTexCoord2f( 1.0f, 0.0f );
			glVertex3f( 0.14f, 0.25f, 0.0f ); // Bottom Right
			glTexCoord2f( 0.0f, 0.0f );
			glVertex3f( 0.0f, 0.25f, 0.0f ); // Bottom Left
		glEnd();
	}
	
	glDisable( GL_TEXTURE_2D );
	
	if ( angle == 300 ) {
		glLoadIdentity();
		glTranslatef( -0.9f, -1.0f, 0.0f );
		glBegin( GL_QUADS );
			glVertex3f( 0.0f, 0.75f, 0.0f ); // Top Left
			glVertex3f( 1.8f, 0.75f, 0.0f ); // Top Right
			glVertex3f( 1.8f, 0.25f, 0.0f ); // Bottom Right
			glVertex3f( 0.0f, 0.25f, 0.0f ); // Bottom Left
		glEnd();
	}
	
	glFlush();
}

Vu que tu alternes entre rectangles texturés et non texturés, il faut si je ne me trompe pas activer / desactiver le GL_TEXTURE_2D suivant si tu en a besoin ou pas. Ensuite, tu as vérifiés avec les outils OpenGL si ta texture est bien chargée ?

@+

Guillaume
 
_gael a dit:
nan, moi je l' ai tj activé une seule fois au debut du program et ca marche!

En effet, ça m'arche si tu n'as QUE des polygones texturés.
Sinon, il faut jouer avec les disable/enable sachant que le passage de l'un à l'autre est couteux.
 
Merci de vos réponses à tous. J'ai bien essayé de rajouter le disable de textures dans mon programme mais ca ne fonctione pas non plus (de toute facon, le dernier rectangle n'est affiché qu'une fois à la fin de l'animation, j'avais oublié de le préciser). Est-il possible que mon bmp soit en faute (je ne pense pas je l'ai crée avec Photoshop, et je l'ai remplacé par celui de NeHe, ca ne marche pas non plus), faut-il des dimensions particulières?