c++ - OpenGL 和 GLSL : Greyscale texture not showing

标签 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 是一个 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);
}

我知道三角形渲染正确(例如,如果我对 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 和 GLSL : Greyscale texture not showing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20173608/

相关文章:

c++ - 属性树 : complete path and name

c++ - 没有按钮图像的 CMFCEditBrowseCtrl

c++ - 如何将调色板添加到 BITMAPINFO

java - 从一维数组构建图像

imagemagick - 如何将没有颜色的图像批量转换为灰度?

C++ stringstream >> int 返回零

c++ - 将某些字符和结构写入文件并读回时,fread 和 fwrite 出现问题

c++ - OpenGL:天空盒放大太多

c++ - 使用 Allegro/SDL 与 OpenGL/DirectX 制作游戏会遇到哪些限制?

c++ - 预期 '(' 跟随 'WINGDIAPI'