J'essaie d'utiliser une texture rectangulaire avec OpenGL. Lorsque la hauteur est égale à la largeur de la texture, tout semble correct, cependant, lorsque la hauteur est différente de la largeur, la texture semble déformée.texture rectangulaire dans OpenGL avec à la fois la largeur et la hauteur POT
Ma fonction d'affichage est (h
et w
sont GLOBALS la hauteur stockage et la largeur de l'image):
S'il vous plaît noter que la taille de l'image dessinée n'a pas d'importance. Il est déformé indépendamment de la taille réelle du polygone.
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glBindTexture(GL_TEXTURE_2D, texName);
glTranslatef(-2.0f,-2.0f,0.0f);
glScalef(1.0f/128.0f,1.0f/128.0f,1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(0.0, w, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(h, w, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(h, 0.0, 0.0);
// Will be distorted also with the following:
/*glScalef(1.0f/128.0f,1.0f/128.0f,1.0f);
glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(0.0, h, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(w, h, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(w, 0.0, 0.0);*/
glEnd();
glFlush();
glDisable(GL_TEXTURE_2D);
}
Je chargement de la texture avec:
void *data = LoadBMP("c:\\dev\\64x128_face.bmp");
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w,
h, 0, GL_RGBA, GL_UNSIGNED_BYTE,
data);
Quand je suis le chargement d'une image de texture carrée 64x64
, il semble bien. Cependant, lorsque je charge une image de texture rectangulaire, l'image semble déformée.
Comment OpenGL prend-il en charge la texture POT rectangulaire? Qu'est ce qui ne va pas avec mon code?
non, il est déformé jamais le moins. Ajout d'une clarification à la question. (Notez que vous devez redimensionner l'image un peu, sinon vous ne verrez qu'un seul gros texel). –
Pourriez-vous poster/télécharger une image de la distorsion? Peut-être que ce serait plus facile, si je pouvais voir comment il est déformé. Ou décrire la distorsion verbalement, est-ce étiré, ou pressé? – Rock
avez-vous essayé mon code et ça vous est arrivé? Ce que je vois est une bande horizontale de la partie la plus à gauche de l'image suivie par une autre bande horizontale de la partie la plus à droite de l'image. –