OpenGL:无法显示纹理

OpenGL: Can't get textures to display

本文关键字:显示 纹理 OpenGL      更新时间:2023-10-16

我现在正在尝试为一个简单的正方形添加纹理超过 5 小时,但我仍然无法做到这一点。

这是我在paintGL()中使用的代码:

glEnable(GL_TEXTURE_2D);
GLuint id;
glGenTextures(1, &id);
glBindTexture(GL_TEXTURE_2D, id);
float pixels[] = {
    0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,
    1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f
};
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(0,0,0);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1,0,0);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1,1,0);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(0,1,0);
glEnd();
if (glGetError() != 0)
{
    qDebug() << glGetError();
}

没有错误,也没有OpenGL的错误。我将透明颜色初始化为灰色。当我尝试用glColor3f(...)改变颜色时,它可以工作。

阅读了我可以通过Google找到的所有教程,但没有人提供帮助。

溶液:我从不放

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

在正确的地方:就在glTexImage2D之后!上面的代码经过编辑,现在就像一个魅力。

您必须为纹理指定过滤:

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

因为默认筛选器使用 mipmap,但您不会生成它们。

在我看来

,你只使用了四分之一的纹理。它只有 4 个像素,并且您已将纹理坐标设置为仅第一个像素。如果该像素为白色,并且纹理环境设置为将四边形的颜色乘以纹理,并且设置为使用最近邻采样,则只会获得颜色。尝试将纹理坐标更改为 (0,0) 到 (1,1),而不是 (0,0) 更改为 (0.5,0.5),看看这是否能给你预期的结果。您还可以尝试以不同的方式设置各种纹理参数和环境,以查看这对绘图有何影响。