我试图在片段着色器中彼此独立地使用PNG纹理的RGBA通道。但是当我使用texture2D(map, uv).g
时,输出似乎包括绿色通道和红色通道的数据。
我正在使用此纹理。
three.js 0.104.0
GIMP 2.10.10中观察到的纹理:
关闭红色通道后关闭,只是为了显示下面显示的数据不在绿色通道中:
顶点着色器:
varying vec2 vUV;
void main(void) {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
vUV = uv;
}
片段着色器:
uniform sampler2D map;
varying vec2 vUV;
void main(void) {
float g = texture2D(map, vUV).g;
vec4 c = vec4(g, g, g, 1.0);
gl_FragColor = c;
}
我希望只看到较大的软圆圈,但是正如您在下图的角落看到的那样,似乎显示了(某些?)红色通道的数据。 为什么会这样,我怎么只显示绿色频道?
片段着色器的输出:
如果我改用texture2D(map, uv).r
,则似乎只得到红色通道数据,正如我期望的那样:
更新:从其他图像编辑器(Krita)导出可解决此问题,因此我认为这与GIMP如何保存.png有关。