OpenGL& GLSL:没有显示灰度纹理

时间:2013-11-24 10:43:54

标签: c++ opengl grayscale fragment-shader

我正试图在屏幕上显示灰度纹理。我通过

创建纹理
glGenTextures(1, &heightMap);
glBindTexture(GL_TEXTURE_2D, heightMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, 512, 512, 0, GL_RED, GL_FLOAT, colorData);

colorData是一个浮点数[512 * 512],其值介于0.0和1.0之间。

渲染时,我使用:

glBindTexture(GL_TEXTURE_2D, heightMap);
glUniform1i(shader.GetUniformLocation("textureSampler"), 0);

shader.GetUniformLocation是我们在大学使用的库的一个功能。它与glGetUniformLocation(着色器,“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);
}

我知道三角形是正确渲染的(例如,如果我使用vec4(1.0,0,0,1)进行frag_color,我会得到一个完全红色的屏幕)。然而,对于上面这一行,我只得到一个完全黑屏。每个纹理值似乎都是0.0。

有没有人有想法,我做错了什么?这几行代码中是否存在错误,或者这些错误完全正确,错误是否在其他地方?

1 个答案:

答案 0 :(得分:1)

如下面的评论之一所示,设置glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);和glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);解决了这个问题。 :)