2 votes

Qu'est-ce qui ne va pas avec ce Texture Mapping ?

Je suis sur le point de devenir fou à cause du mappage de texture d'openGL. Il ne mappe jamais la bonne chose, s'il vous plaît jetez un coup d'oeil.

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, speed.texID);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

glBegin(GL_QUADS);
    glTexCoord2f(1,0); 
    glVertex2f(210, 638);   //Top-Left
    glTexCoord2f(1,1);
    glVertex2f(210, 438);   //Top-Right
    glTexCoord2f(0,1); 
    glVertex2f(10, 438);    //Bottom-Right
    glTexCoord2f(0,0);
    glVertex2f(10, 638);    //Bottom-Left
glEnd();
glDisable(GL_TEXTURE_2D);

Après ce code, l'image de sortie devient ceci : enter image description here

Mais je veux que ce soit comme ça : enter image description here

Lorsque je change la texture en quelque chose d'autre, il la mappe correctement, mais apparemment pas celle-ci. Pourquoi pensez-vous que cela puisse être le cas ?

4voto

JasonD Points 10471

Si d'autres textures fonctionnent, il y a de fortes chances que cette texture soit d'une taille inhabituelle ou d'un format différent, et qu'elle ait été chargée sans tenir compte de certains rembourrages nécessaires.

Il est courant que le format des textures doive être un nombre pair de pixels, ou être arrondi à un autre multiple.

L'inclinaison de 45 degrés de la texture est également révélatrice de ce type de problème, car elle résulte souvent de la lecture (ou du saut) d'un pixel supplémentaire sur chaque ligne à un moment donné du pipeline.

Les solutions possibles sont les suivantes :

  • Modifiez les dimensions de votre texture, de manière à ce qu'il n'y ait pas de rembourrage.
  • Modifiez le chargement de votre texture, de sorte que le remplissage soit conforme à ce que GL attend.
  • Dites à GL comment votre texture est emballée, en utilisant glPixelStorei()

1voto

Felix K. Points 3073

Si vous travaillez avec des textures qui ne peuvent pas être alignées sur 4 octets, vous devez vous préoccuper de plusieurs choses, l'une d'entre elles étant de définir l'alignement correct de l'emballage et du déballage des pixels :

glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

Pour plus d'informations, voir ici.

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