首页 文章

OpenGL多重纹理混合

提问于
浏览
1

我正在尝试像photoshop一样实现图层功能 . 这是我想要画的..

http://s19.postimage.org/6n8eejbkz/image.png

但它如下图所示

http://s19.postimage.org/hpdhcz5nn/image.png

它使用两层 . 用2个纹理框架构建一个用于背景,另一个用于绘制 . 纹理与片段着色器混合 .

mediump  vec4 tex0_color = texture2D(texunit0,TexCoordOut);  // bg texture
mediump  vec4 tex1_color = texture2D(texunit1,TexCoordOut);  // drawing texture 
mediump  vec4 mix_color  = mix(tex0_color,tex1_color,tex1_color.a);

并且使用顶点精灵执行绘图层上的每个绘制

highp float a = DestinationColor.a * texture2D(texunit0,gl_PointCoord).a;
gl_FragColor  = vec4(DestinationColor.rgb,a);

和混合功能设置如下..

glEnable    (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

你能给我一些建议吗?

2 回答

  • 1

    着色器不会执行混合操作,因为它需要读取和写入目标纹理,这只能同步完成,导致性能非常差 . 这种同步现在只能在非可编程流水线中实现 .

    你可能会考虑使用两种纹理,一种用于阅读,另一种用于书写 . 应用刷子后,切换它们 .

  • 3

    我想你是在this之后 . 如果你需要通过GLSL实现各种类似Photoshop的混合模式,请查看this文章 . 与使用着色器相比,硬件混合相当有限 .

相关问题