以下是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