这个纹理映射有什么问题?

时间:2013-01-14 10:21:20

标签: opengl textures hud

由于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);

此代码输出图像变为: enter image description here

但我希望它是这样的:enter image description here

当我将纹理更改为其他内容时,它会正确映射它,但显然不是这个。为什么你认为这可能是?

2 个答案:

答案 0 :(得分:4)

如果其他纹理有效,则此纹理可能是奇数或不同的格式,并且已加载而未观察到一些必要的填充。

纹理格式通常需要是偶数个像素,或者舍入到其他倍数。

对纹理的45度倾斜也表明了这种问题,因为它通常是由于在管道中的某一点读取(或跳过)每一行的额外像素。

可能的解决方法是:

  • 更改纹理的尺寸,这样就不会有填充。
  • 更改纹理的加载,使填充与GL期望的结果一致
  • 使用glPixelStorei()
  • 告诉GL您的纹理是如何打包的

答案 1 :(得分:1)

如果您正在使用无法与4个字节对齐的纹理,您必须关注一些事情,一个是设置正确的像素包并解压缩对齐:

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

有关详细信息,请参阅here.