0

我已经实现了深度纹理并在 2 个不同的驱动程序上获得了不同的输出。我正在片段着色器中读取纹理()中的所有通道:

“vec4 color = texelFetch(tk_diffuseMap, ivec3(tmp), i);” 

在这种情况下,我分别在 A 和 B 上得到一个红色和灰色的图像。如果我读取红色通道并将其复制到所有 4 个通道,我会在 A 上得到一个灰色图像,例如:

“vec4 color = vec4(texelFetch(tk_diffuseMap, ivec3(tmp), i).x)”. 

哪一个是正确的? 在此处输入图像描述

在此处输入图像描述

4

1 回答 1

3

哪个是正确的无关紧要,因为您根本不应该查看其他三个频道。这是一个深度纹理;它只有一个频道,第一个。那是你应该触摸的唯一一个。即使 OpenGL 定义了其他值是什么,它也只是一些无关紧要的默认值,因为你不在乎。你想要深度,所以不要再看非深度值了。

但是,如果您想要规范答案,您应该从GL_RED纹理中获得相同的结果:0 表示绿色和蓝色,1 表示 alpha。

于 2013-02-27T12:17:33.277 回答