如何混合两个纹理使纹理并排,左边是纹理A的50%,右边是纹理B的50%。
例如
----------------
| | |
| 50% A | 50% B|
| | |
----------------
我希望该地区可以改变,因此可能是25%A 75%B。
现在我可以在Rect上完全混合两个纹理,每个纹理都是半透明的。
这是我的碎片着色器
uniform sampler2D tex;
uniform sampler2D texx;
uniform float alpha;
in vec2 textureCoord;
out vec4 finalColor;
void main() {
vec4 first_sample = texture(tex, textureCoord);
vec4 second_sample = texture(texx, textureCoord);
finalColor = first_sample * alpha + second_sample * (1-alpha);
}
我是否需要在C ++程序中创建alpha蒙版纹理? 谢谢。
答案 0 :(得分:2)
Alpha蒙版(1D纹理就足够了)是可能的解决方案之一,但在这种特殊情况下没有必要
uniform sampler2D tex0;
uniform sampler2D tex1;
uniform float t; // e.g. 0.4
in vec2 texcoord;
out vec4 outColor;
void main(void)
{
vec4 t0 = texture2D(tex0, texcoord);
vec4 t1 = texture2D(tex1, texcoord);
outColor = mix(t0, t1, step(t, texcoord.x));
}
顺便说一下,它不叫'混合'。而是“阈值”或“步骤”。