赞
踩
使用混合模式可以制作丰富多彩的效果。而OpenGL中可以轻松开启这种模式,但更关键的是图形算法。本文参照 Photoshop blend算法 ,介绍如何通过shader,在OpenGL中实现混合效果。
在OpenGL中可以开启混合模式:
- glEnable( GL_BLEND ); // 启用混合
- glDisable( GL_BLEND ); // 禁用关闭混合
统一说法,参照Photoshop,下方图层、 baseColor 为原色。上方图层、 blendColor 为混合色。下面介绍 Photoshop blend算法 的详细实现。
先上一张公式汇总图,图片来自网络,出于效率和效果的平衡,有些公式跟下文提到的有些出入。
使上方图层完全遮住下方图层。
gl_FragColor = baseColor * (1.0-blendColor.a) + blendColor * blendColor.a;
整个变暗块都是通过混合色的叠加,使结果更暗。常用的是变亮变暗,程度正常,正片叠底及滤色,较为柔和。
两个图层中较暗的颜色将作为混合的颜色保留,比混合色亮的像素将被替换,而比混合色暗像素保持不变。
gl_FragColor = min(baseColor,blendColor);
整体效果显示由上方图层和下方图层的像素值中较暗的像素合成的图像效果,任意颜色与黑色重叠时将产生黑色,任意颜色和白色重叠时颜色则保持不变。
gl_FragColor = baseColor*blendColor;
选择该项将降低上方图层中除黑色外的其他区域的对比度,使图像的对比度下降,产生下方图层透过上方图层的投影效果。
gl_FragColor = vec4(1.0) - (vec4(1.0)-baseColor)/blendColor);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。