c++ - OpenGL:无法显示纹理

标签 c++ opengl texture-mapping

我已经尝试将纹理添加到一个简单的正方形超过 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/

相关文章:

python - 将纹理映射到 mayavi 网格

math - glsl 和不同值的透视校正

c++ - 另一个类中使用的非静态类<未解析的重载函数类型>

perl - 如何将 2 个或更多纹理贴图应用于 gluSphere OpenGL 对象?

c++ - 如何设置 Qt 以使用 blueZ 蓝牙堆栈

opengl - 具有色差的反射/折射 - 眼睛校正

c++ - 使用平截头体时 OpenGL 远剪裁

c++ - 使用立方体贴图(不是反射贴图)对球体进行纹理化

c++ - 创建列表 vector 时出错

c++ - '*(<type> *) &x' 和 'x' 有什么区别?