注:本文旨在记录笔者的学习过程,仅代表笔者个人的理解,如果有表述不准确的地方,欢迎各位指正!因为涉及到的概念来源自网络,所以如有侵权,也望告知!
前言
本文重点是理解OpenGL在渲染像素颜色时对颜色进行混合的处理过程。
正文
在大家小时候上美工课时就会有一个认知,当你将红色的颜料和绿色的颜料混合到一起以后,颜料的颜色就会改变,就如同下面这个图片所展示的那样:但是大家可能并不了解,在计算机的世界里究竟是怎么完成的。那接下来我就从OpenGL的颜色处理给大家讲解一下这个实现原理。
颜色混合方程
混合因子
从混合方程我们了解到,最终混合后的颜色可以通过设置不同的混合因子来实现,那么在OpenGL中提供了哪些可以选择的混合因子呢?
如图所示,表中R、G、B、A 分别代表 红、绿、蓝、alpha,下标S、D,分别代表源、⽬标,C 代表常量颜⾊(默认⿊⾊)。
设置混合因子,我们需要⽤到glBlendFun函数glBlendFunc(GLenum S,GLenum D),S:源混合因⼦、D:⽬标混合因⼦,但是就同混合方程一样,虽然OpenGL给我们提供了很多选择,但是我们最常用的混合因子是GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA,即glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。
案例
通过混合方程可得,Cf = (Cs * S) + (Cd * D) = (Green * 0.6f) +(Red * 0.4f)。最终颜⾊是以原先的红⾊(⽬标颜⾊)与 后来的绿色(源颜⾊)进⾏组合。源颜⾊的alpha值越⾼,添加的绿⾊颜⾊成分越⾼,⽬标颜⾊所保留的成分就会越少。