8 votes

La carte de texture OpenGL simple ne fonctionne pas ?

J'essaie de comprendre le mappage de texture en OpenGL et je n'arrive pas à faire fonctionner un exemple simple.

Le polygone est en train d'être dessiné, bien qu'il ne soit pas texturé mais juste d'une couleur unie. De plus, le bitmap est chargé correctement dans sprite1[] car j'utilisais avec succès glDrawPixels jusqu'à présent.

J'utilise glGenTextures pour obtenir mon nom de tex, mais je remarque que cela ne change pas texName1 ; ce GLuint est ce à quoi je l'initialise, même après l'appel à glGenTextures...

J'ai activé GL_TEXTURE_2D.

Voici le code :

GLuint texName1 = 0;

glGenTextures(1, &texName1);
glBindTexture(GL_TEXTURE_2D, texName1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
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);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, sprite1[18], sprite1[22], 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, &sprite1[54]);

glColor3f(1, 1, 0);
glBindTexture(GL_TEXTURE_2D, texName1);
glBegin(GL_QUADS);
    glTexCoord2f (0.0, 0.0);
    glVertex3f (0.0, 0.0, -5.0f);
    glTexCoord2f (1.0, 0.0);
    glVertex3f (.5, 0.0, -5.0f);
    glTexCoord2f (1.0, 1.0);
    glVertex3f (.5, .5, -5.0f);
    glTexCoord2f (0.0, 1.0);
    glVertex3f (0.0, .5, -5.0f);
glEnd();

MISE À JOUR : Je suis perdu. Voici tout ce que j'ai essayé :

  1. Il s'avère que j'initialisais ma texture avant que l'OGL ne soit initialisé. La texture est initialisée (glGenTextures->glTexImage2D) dans un constructeur de classe et dessinée (glBegin->glEnd) dans une fonction membre qui est appelée à chaque image. genTextures semble fonctionner correctement maintenant et j'obtiens un nom de 1.

  2. Toutes les combinaisons possibles de GL_RGBA8, GL_BGRA_EXT (GL_BGRA ne fonctionne pas sur mon système ; j'ai besoin du _EXT), et j'ai même supprimé le canal alpha du bitmap et essayé toutes les combinaisons de GL_RGB, GL_BGR_EXT, etc etc. Sans succès.

  3. J'ai essayé de créer un bitmap de manière procédurale et de l'utiliser.

  4. Assurez-vous que GL_COLOR_MATERIAL n'est pas activé.

  5. Changement de la taille des bitmaps en 32x32.

  6. J'ai essayé glTexEnvi au lieu de glTexEnvf.

1voto

Tony R Points 2433

J'ai trouvé le problème. Mon appel à glEnable était glEnable(GL_BLEND | GL_TEXTURE_2D) . En utilisant glGetError j'ai vu que je recevais un GL_INVALID_ENUM pour cet appel, donc j'ai déplacé GL_TEXTURE_2D vers sa propre fonction enable et bingo. Je suppose que le OU logique n'est pas autorisé pour glEnable ?

0voto

Ed Woodcock Points 5170

La première chose que je vérifierais est le paramétrage de la matière colorée, comme mentionné par ShadowIce, puis vérifiez votre fichier de texture pour vous assurer qu'il est d'une taille raisonnable (c'est-à-dire quelque chose comme 256x256) et un bitmap RVB. Si le fichier a ne serait-ce qu'un léger problème, le rendu ne sera PAS correct, quelles que soient vos tentatives.

Ensuite, j'arrêterais d'essayer de déboguer ce code et je verrais plutôt ce que vous avez de différent dans le code d'accès à l'Internet. tutoriel sur le site web de NeHe .

NeHe est toujours un bon endroit pour vérifier si vous essayez de faire des choses en OpenGL. Les textures sont probablement la chose la plus difficile à réaliser, et elles deviennent de plus en plus difficiles au fur et à mesure que vos compétences en GL augmentent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X