由于openGL的纹理映射,我即将发疯。它会映射正确的东西,请看一下。
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);
此代码输出图像变为:
但我希望它是这样的:
当我将纹理更改为其他内容时,它会正确映射它,但显然不是这个。为什么你认为这可能是?
答案 0 :(得分:4)
如果其他纹理有效,则此纹理可能是奇数或不同的格式,并且已加载而未观察到一些必要的填充。
纹理格式通常需要是偶数个像素,或者舍入到其他倍数。
对纹理的45度倾斜也表明了这种问题,因为它通常是由于在管道中的某一点读取(或跳过)每一行的额外像素。
可能的解决方法是:
glPixelStorei()
答案 1 :(得分:1)
如果您正在使用无法与4个字节对齐的纹理,您必须关注一些事情,一个是设置正确的像素包并解压缩对齐:
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
有关详细信息,请参阅here.