1

纹理如下:

gl_FragColor=texture2D(my_main_texture, vUv);

gl_FragColor= mix(gl_FragColor,texture2D(texture[1], 32.0*vUv),texture2D(mask[0], vUv).r);
gl_FragColor= mix(gl_FragColor,texture2D(texture[2], 32.0*vUv),texture2D(mask[0], vUv).b);

例如,使用掩码:

http://i.imgur.com/Y0p9ilH.png

但是由于某种原因,红色和蓝色蒙版之间的边界上不会产生纹理值,尽管蓝色和红色蒙版之间每个像素的通道数是 255

例如,以下代码具有:

gl_FragColor=vec4(0.0);

gl_FragColor= mix(gl_FragColor,vec4(1.0),texture2D(mask[0], vUv).r);
gl_FragColor= mix(gl_FragColor,vec4(1.0),texture2D(mask[0], vUv).b);

我得到:

http://i.imgur.com/hCMqbAm.png

阴影圆圈 - 这是红色和蓝色蒙版之间的边界,它不应该是

如何摆脱它?也许是使用 mix() 的原因,还有其他方法可以达到预期的效果吗?

4

1 回答 1

1

这是因为纹素的线性插值。你会得到一半蓝色和一半红色的“中间值”。从而产生灰色。您可以关闭纹理插值。或尝试:

vec4 m0=texture2D(mask[0], vUv);
gl_FragColor= gl_FragColor*(1.0-m0.r-m0.b)+texture2D(texture[1], 32.0*vUv)*m0.r+texture2D(texture[3], 32.0*vUv)*m0.b;
于 2014-12-29T23:49:28.560 回答