混合着色是把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜色。其公式如下
source × src + destination × dst
命令BLEND_FUNC(src, dst)为实现混合着色的命令,src和dst支持的参数如下:
ZERO: 表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。
ONE: 表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算。
SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。
参数 | 源因子/目标因子 |
ZERO | (0,0,0,0) |
ONE | (1,1,1,1) |
SRC_ALPHA | (AS/kA,AS/kA,AS/kA,AS/kA) |
DST_ALPHA | (AD/kA,AD/kA,AD/kA,AD/kA) |
ONE_MINUS_SRC_ALPHA | (1,1,1,1) - (AS/kA,AS/kA,AS/kA,AS/kA) |
ONE_MINUS_DST_ALPHA | 1,1,1,1) - (AD/kA,AD/kA,AD/kA,AD/kA) |
测试代码如下,图片handle 4是一张红色圆球图片。
ftWrDispCmd(BLEND_FUNC(SRC_ALPHA, ONE));
ftWrDispCmd(COLOR_RGB(0x00, 0xff, 0x00));
ftCoCmdText(PANEL_WIDTH / 2, PANEL_HEIGHT / 2 - 60, 30, OPT_CENTER, "Blend Function");
ftWrDispCmd(COLOR_RGB(0xff, 0xff, 0xff));
ftWrDispCmd(BITMAP_HANDLE(4));
ftWrDispCmd(BEGIN(BITMAPS));
ftWrDispCmd(CELL(0));
ftWrDispCmd(VERTEX2F((PANEL_WIDTH / 2 - 100 + (gMenuParam.num / 2) % 200) * 16,
(PANEL_HEIGHT / 2 - 60 - 25) * 16));
ftWrDispCmd(BLEND_FUNC(SRC_ALPHA, ONE_MINUS_SRC_ALPHA));
红色球和绿色字重叠的部分会变成黄色。
修改BLEND的方式:ftWrDispCmd(BLEND_FUNC(ONE, ONE_MINUS_DST_ALPHA));
修改BLEND的方式:ftWrDispCmd(BLEND_FUNC(ONE, DST_ALPHA));