我写了这个简单的着色器纹理覆盖在另一个(基地)的质感 -如何叠加纹理而不裁剪基础纹理?
varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
void main()
{
mediump vec4 base = texture2D(inputImageTexture, textureCoordinate);
mediump vec4 overlay = texture2D(inputImageTexture2, textureCoordinate2);
mediump float ra = (overlay.a) * overlay.r + (1.0 - overlay.a) * base.r;
mediump float ga = (overlay.a) * overlay.g + (1.0 - overlay.a) * base.g;
mediump float ba = (overlay.a) * overlay.b + (1.0 - overlay.a) * base.b;
gl_FragColor = vec4(ra, ga, ba, 1.0);
}
问题 - 这个工程除了一个问题。如果重叠图像小于基本图像,则重叠图像的外部区域给出α值为1.0,即overlay.a == 1.0
。由于这个原因,基础图像被覆盖图像剪切。覆盖图之外的区域显示为黑色。
我是新来的opengl,并期待它的边界外,纹理的alpha应该显示为0.0?如何修复我的着色器代码以实现所需的行为?或者我需要修改我的图形管道?
编辑顶点着色器如下─
attribute vec4 inputTextureCoordinate2;
varying vec2 textureCoordinate;
varying vec2 textureCoordinate2;
void main()
{
gl_Position = pos;
textureCoordinate = uv;
textureCoordinate2 = inputTextureCoordinate2.xy;
}
你可以发布你的顶点着色器代码吗? – Swifter
@Swifter:添加了顶点着色器 –