2012-04-09 62 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