【发布时间】:2016-03-08 20:16:49
【问题描述】:
我已经编写了这个简单的着色器来将纹理覆盖在另一个(基础)纹理上 -
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);
}
问题 - 除一个问题外,此方法有效。如果叠加图像小于基本图像,则叠加图像的外部区域的 alpha 值为 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:添加了顶点着色器
标签: android opengl-es shader opengl-es-2.0