我正试图在屏幕上显示灰度纹理。我通过
创建纹理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。
有没有人有想法,我做错了什么?这几行代码中是否存在错误,或者这些错误完全正确,错误是否在其他地方?
答案 0 :(得分:1)
如下面的评论之一所示,设置glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);和glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);解决了这个问题。 :)