我已经尝试将纹理添加到一个简单的正方形超过 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,但您没有生成它们。
关于c++ - OpenGL:无法显示纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461535/