OpenGL:无法显示纹理
OpenGL: Can't get textures to display
我现在正在尝试为一个简单的正方形添加纹理超过 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),看看这是否能给你预期的结果。您还可以尝试以不同的方式设置各种纹理参数和环境,以查看这对绘图有何影响。
相关文章:
- dx11 渲染到纹理仅显示透明颜色
- 无法获取要在 OpenGL ES2 中显示的 RGB 纹理
- 如何显示具有 opengl 纹理的灰度图像
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- 如何使用 openGL 在屏幕上显示加载的纹理
- 在 SFML 中不使用动态内存时显示白色纹理代替实际纹理
- 纹理显示为黑色
- 使用两个纹理 SDL2 显示视频
- 纹理未显示
- 渲染到框架/纹理显示为空
- 无法使用 OpenGL 显示纹理
- OpenGL纹理未显示
- 使用OpenGL显示两个对象.纹理不像预期的那样行为
- 试图显示纹理,但只能使用OpenGL获得纯色
- OpenGL:无法显示纹理
- 在openGL(版本>3.3)的屏幕上显示纹理时如何更改纹理的大小?
- QT和OpenGL如何正确集成和显示纹理
- 无法在SDL 2中显示纹理
- 用c++在OpenGL ES中显示纹理有问题
- 为什么我不能在OpenGL中显示纹理