【问题标题】:OpenGL & GLSL: Greyscale texture not showingOpenGL 和 GLSL:灰度纹理不显示
【发布时间】: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


【解决方案1】:

正如下面的 cmets 之一所说,设置 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);和 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);解决问题。 :)

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多