Opengl着色器GLSL通过coord混合两种纹理

时间:2013-12-01 09:33:28

标签: opengl glsl shader fragment-shader

如何混合两个纹理使纹理并排,左边是纹理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蒙版纹理? 谢谢。

1 个答案:

答案 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));
}

顺便说一下,它不叫'混合'。而是“阈值”或“步骤”。