我试图在OpenGL中使用矩形纹理。当高度等于纹理的宽度时,一切看起来都很好,但是,当高度与宽度不同时,纹理看起来会变形。OpenGL中的矩形纹理,宽度和高度POT
我的显示功能(h
和w
是全局存储的高度和图像的宽度):
请注意,绘制图像的大小并不重要。无论实际的多边形大小如何,它都会失真。
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);
}
我加载的质地:
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);
当我加载64x64
方形纹理图像,它看起来不错。但是,当我加载矩形纹理图像时,图像看起来失真。
OpenGL如何支持矩形POT纹理?我的代码有什么问题?
不,它被扭曲永远不会少。增加了对问题的澄清。 (注意你必须稍微缩放图像,否则你只会看到一个大的纹理元素)。 – 2010-08-09 13:26:11
您可以发布/上传失真图片吗?如果我能看出它是如何扭曲的话,也许会更容易些。或者口头形容这种变形,是伸展还是挤压? – Rock 2010-08-09 19:11:30
你有没有试过我的代码,它对你来说OK?我所看到的是图像最左侧部分的横条纹,然后是图像最右侧部分的另一条横条纹。 – 2010-08-10 18:17:38