我正在尝试在屏幕上显示灰度纹理。我通过
创建我的纹理glGenTextures(1, &heightMap);
glBindTexture(GL_TEXTURE_2D, heightMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, 512, 512, 0, GL_RED, GL_FLOAT, colorData);
colorData 是一个 float [512*512],其值介于 0.0 和 1.0 之间。
渲染时,我使用:
glBindTexture(GL_TEXTURE_2D, heightMap);
glUniform1i(shader.GetUniformLocation("textureSampler"), 0);
shader.GetUniformLocation 是我们在大学使用的一个库的函数。它本质上与 glGetUniformLocation(shader, "textureSampler") 相同,所以不要被它混淆。
我通过三角形带渲染两个三角形。我的片段着色器是:
#version 330
layout(location = 0) out vec4 frag_color;
in vec2 texCoords;
uniform sampler2D textureSampler;
void main()
{
frag_color = vec4(texture(textureSampler, texCoords).r, 0, 0, 1);
}
我知道三角形渲染正确(例如,如果我对 frag_color 使用 vec4(1.0, 0, 0, 1),我会得到一个完全红色的屏幕)。但是,对于上面的行,我只能得到一个完全黑屏。每个纹理值似乎都是 0.0。
有没有人知道我做错了什么?是那几行代码有错误,还是这些代码完全正确,但错误出在其他地方?
最佳答案
正如下面的评论之一所说,设置 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);和 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);解决了问题。 :)
关于c++ - OpenGL 和 GLSL : Greyscale texture not showing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20173608/