Question

Je suis en train de rendre une image à la fenêtre. Super simple, (ou alors je pensais). Peu importe ce que je fais, je reçois toujours ce carré violet. Quelques petits morceaux de mon code:

// load image from file, called one time on load:
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);

RgbImage theTexMap( filename );

glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, theTexMap.GetNumCols(), theTexMap.GetNumRows(), 0, GL_RGB, GL_UNSIGNED_BYTE, theTexMap.ImageData() );

// render quad and texture, called inside glutDisplayFunc callback
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-50.0, -50.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-50.0, 50.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(50.0, 50.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(50.0, -50.0, 0.0);
glEnd();

glFlush();
glDisable(GL_TEXTURE_2D);

Je découpe beaucoup de code parce que je suis tenté d'étendre un exemple de la bibliothèque tiers (ARToolkit). Il y a beaucoup plus de code là que les besoins HERE.

Toutes les idées pour une erreur que je pourrais formulerai qui afficherait le quad, mais pas rendre la texture / image?

text alt

Était-ce utile?

La solution

Rebind votre objet texture dans votre rappel glutDisplayFunc(), Just In Case ™.

De plus, je suis un peu méfiants de l'GL_RGBA8. Essayez GL_RGBA. Probablement la superstition de ma part bien.

Autres conseils

J'sais sans essayer moi-même, mais il semble un peu étrange que vous utilisez GL_RGBA8 pour le format interne et GL_RGB pour le format de pixel.

Personnellement, à moins que je l'utilise sur ma texture Je vais aussi faire un GL_DISABLE(GL_LIGHTING) aussi pour les objets texturés, je sais pas si cela aide, mais je sais que j'ai rencontré certaines choses que je ne comprenais pas vraiment dans la mesure combinaisons de lumière et la texture sont concernés.

Quelques idées:

ne doit pas vous appelez glEnable (GL_TEXTURE_2D) avant de configurer et de télécharger la texture?

Avez-vous assurer que les dimensions de la texture sont des puissances de 2?

Si vous souhaitez utiliser des fonctions d'agrandissement / Minification GL_LINEAR, vous voudrez probablement générer mipmaps de votre texture d'origine.

Avez-vous essayé d'utiliser GL_REPLACE plutôt que GL_MODULATE?

Je ne vois pas vous passer toutes les couleurs avec vos sommets, et GL_MODULATE modulera avec tout ce qui est la couleur actuelle.

Votre texture spécifie uniquement le niveau MIP 0, et non les autres niveaux de MIP, de sorte que le résultat peut être indéfini si elle n'est pas le rendu au niveau MIP 0. La solution rapide est:

glTexParameteri (GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

Il est une erreur facile. Une bonne référence:

http://www.opengl.org/wiki/Common_Mistakes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top