以下是GLSL覆蓋摻合物算法的實現,從OpenGL的Shading®語言繪製,第三版:如何將GLSL疊加混合轉換爲OpenGL ES 1.1?
12年6月19日疊加
OVERLAY首先計算基準值的亮度 。
如果亮度值小於 0.5,則將混合值和基準值相乘。
如果亮度值大於0.5,則執行屏幕操作。
效果是基準值是 與混合值混合在一起,而不是 被替換。這允許 圖案和顏色覆蓋 基本圖像,但保留基礎圖像中的陰影和高光 。
在亮度 = 0.5時發生不連續。爲了提供平滑過渡,我們實際上對 範圍[0.45,0.55]內的兩個亮度等式進行了線性混合。
float luminance = dot(base, lumCoeff);
if (luminance < 0.45)
result = 2.0 * blend * base;
else if (luminance > 0.55)
result = white - 2.0 * (white - blend) * (white - base);
else {
vec4 result1 = 2.0 * blend * base;
vec4 result2 = white - 2.0 * (white - blend) * (white - base);
result = mix(result1, result2, (luminance - 0.45) * 10.0);
}
我將如何實現在OpenGL ES 1.1類似(針對iPhone 3G),不使用着色?我可以使用混合函數或紋理合並來實現這一點嗎?
布拉德,謝謝。 我發現石英2D具有混合函數CGContextSetBlendMode,我可以用它代替opengl-es – Cylon 2011-01-10 12:14:45