【发布时间】:2013-12-09 00:43:29
【问题描述】:
我正在尝试在屏幕上显示灰度纹理。我通过
创建我的纹理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(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 grayscale fragment-shader