【发布时间】:2011-01-11 00:10:50
【问题描述】:
以下是 GLSL 中叠加混合算法的实现,取自 OpenGL Shading® Language,第三版:
19.6.12 叠加层
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)中实现类似的功能?我可以使用混合函数或纹理组合来实现吗?
【问题讨论】:
-
布拉德,谢谢。我发现quartz 2D有混合函数CGContextSetBlendMode,我可以用它代替opengl-es