0

我使用 GL_LUMINANCE 格式加载带有灰度图像的纹理。

当我float NP = texture2D(input1, textureCoordinate).r;在片段着色器中使用时,程序失败。

是否可以读取像素灰度值,或者我是否仅限于使用 4 个通道?

4

1 回答 1

0

当然。这是一些加载“高度图”的 GL 代码(灰度级存储为float's)。纹理存储在单元 0 中。

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureNames[0]);
...
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
             heightMap.W, heightMap.H, 0,
             GL_LUMINANCE, GL_FLOAT, &heightMap.elev[0]);

这是我的顶点着色器中的相关代码。制服HeightMap为 0(单位 0)。

 float z = texture2D(HeightMap, TexCoord0).x * ElevScale + ElevShift;

奇迹般有效。

于 2012-06-28T16:18:07.640 回答