我正在尝试在屏幕上显示灰度纹理。我通过创建我的纹理
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);
}
我知道三角形的渲染正确(例如,如果我对vrag_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:灰度纹理未显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20173608/