最近我的纹理发疯了。我试图映射的最后2个纹理如下图所示。我希望它出现在第一张照片中,但不管我做了什么,它都坚持像后者一样出现。请忽略文本,它与纹理无关。
我正在使用GLUT进行openGL窗口化,以及GLM obj loader的tga阅读器。我以前多次使用过这款读卡器,没有任何问题。它刚刚停止工作,我最后两次尝试加载纹理。相关代码如下:
Texture onScreenTexture;
if (LoadTGA(&onScreenTexture, "back.tga"))
{
glGenTextures(1, &onScreenTexture.texID);
glBindTexture(GL_TEXTURE_2D, onScreenTexture.texID);
glTexImage2D(GL_TEXTURE_2D, 0, onScreenTexture.bpp / 8, onScreenTexture.width, onScreenTexture.height, 0, onScreenTexture.type, GL_UNSIGNED_BYTE, onScreenTexture.imageData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
if (onScreenTexture.imageData)
{
free(onScreenTexture.imageData);
}
}
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, onScreenTexture.texID);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glBegin(GL_QUADS);
glTexCoord2f(0,0); glVertex2f(10.0, 10.0);
glTexCoord2f(0,1); glVertex2f(260, 10.0);
glTexCoord2f(1,1); glVertex2f(260, 110);
glTexCoord2f(1,0); glVertex2f(10.0, 110);
glEnd();
glDisable(GL_TEXTURE_2D);
答案 0 :(得分:3)
这与宽度/高度的比例无关(尽管你似乎将其旋转90度,导致一些额外的拉伸),但是包含像素行。从对角线模式中可以看出这一点,表明了渐进式对齐问题,以及彩色条纹,表明RGB数据在每一行上都是不对齐的。
在你的情况下,你正在加载一个没有行填充的TGA,但是将它传递给GL,默认情况下要求将像素行填充到4个字节的倍数。
你的工作纹理可能是32位而不是24位,或者是4像素宽的倍数,其中任何一种都可以自然对齐。
可能的解决方法是:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);