为什么texture2D(map,uv).g包含来自其他颜色通道的数据?

时间:2019-05-11 14:49:51

标签: three.js glsl gimp

我试图在片段着色器中彼此独立地使用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有关。

0 个答案:

没有答案