【发布时间】:2013-09-04 04:56:00
【问题描述】:
我正在学习 OpenGL ES 2.0,我想创建一个应用程序以更好地了解它的工作原理。 该应用程序有一组过滤器,用户可以将其应用于图像(我知道,没什么新东西:P)。
其中一个过滤器需要两张图像和一个蒙版,它将通过蒙版显示它们的两张图像混合在一起(这里的图像可以更好地解释我想要获得的内容)
目前我真的很困惑,我不知道从哪里开始创建这种效果。 我不明白我是否必须使用多个纹理和多个帧缓冲区,或者我只能使用单个着色器。
你有什么提示可以帮助我做这个项目吗?
编辑--------
我找到了这个解决方案,但是当我使用遮罩线而不是圆圈时,结果真的很“邋遢”,尤其是当线条旋转时。
precision highp float;
varying vec4 FragColor;
varying highp vec2 TexCoordOut;
uniform sampler2D textureA;
uniform sampler2D textureB;
uniform sampler2D mask;
void main(void){
vec4 mask_color = texture2D(mask, TexCoordOut);
if (mask_color.a > 0.0){
gl_FragColor = texture2D(textureA, TexCoordOut);
}else {
gl_FragColor = texture2D(textureB, TexCoordOut);
}
}
使用模板缓冲或混合可能更好吗?
【问题讨论】:
-
顺便说一句,您不必使用 alpha (
mask_color.a) 通道进行遮罩。您可以使用任何其他r,g,b通道,这样您就可以通过使用不带 Alpha 通道的遮罩纹理来节省 GPU 内存。 -
@MatterGoal 或许你可以回答这个问题,stackoverflow.com/questions/24486729/…
标签: opengl-es-2.0 shader