2012-04-09 33 views
0

我试图在点精灵上模拟Photoshop的叠加混合模式。这在OpenGL ES中可能吗?带有点精灵的OpenGL ES叠加混合模式

+0

[这个问题]的可能重复(http://stackoverflow.com/q/8771413/1086804) – 2012-04-09 05:06:12

+0

不,不处理点精灵。我不确定如何使用点精灵访问背景纹理。我想我需要使用OpenGL混合模式。 – Dex 2012-04-09 05:08:54

回答

0

编辑 - 这可以帮助你一起:

请注意:我下面的代码邀功;我发现它PowerVR的论坛:http://www.imgtec.com/forum/forum_posts.asp?TID=949

uniform sampler2D s_renderTexture; 
uniform sampler2D s_overlayMap; 
varying mediump vec2 myTexCoord; 

void main() 

{ 
    //Get the Texture colour values 
    lowp vec3 baseColor = texture2D(s_renderTexture, myTexCoord).rgb; 
    lowp float overlayTexture = texture2D(s_overlayMap, myTexCoord).r; 
    lowp vec3 finalMix = baseColor + (overlayTexture - 0.5) * (1.0 - abs(2.0 * baseColor - 1.0)); 

    //Set the Fragments colour 

    gl_FragColor = vec4(finalMix, 1.0); 

} 

当然,渲染点精灵之前调用此:

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE); 

这将导致添加剂调合而成。

这里有不同的混合模式组合的视觉参考: http://zanir.wz.cz/?p=60&lang=en

这是一个旧的一页,但它是一个很好的参考。

更多基于OpenGL-ES混合:http://www.khronos.org/opengles/sdk/docs/man/xhtml/glBlendFunc.xml

+0

对于半透明像素呢? Photoshop混合模式与OpenGL有点不同,它使用这个公式'((base.r <0.5)(2.0 * base.r * overlay.r):(1.0 - 2.0 *(1.0 - base.r)*( 1.0 - overlay.r))),...' – Dex 2012-04-10 02:19:37

+0

请参阅我编辑的答案。 – Erik 2012-04-10 07:48:22