面具之间的GLSL深色接缝

时间:2014-12-29 16:59:02

标签: glsl mask multitexturing

纹理如下:

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()的原因,还有其他方法可以达到预期的效果吗?

1 个答案:

答案 0 :(得分: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;