EVE-21 颜色屏蔽

22 篇文章 0 订阅

COLOR_MASK - 开启或是关闭颜色成分的写入

COLOR_MASK(r, g, b, a): 4个参数分别开启或是关闭Red,Green,Blue,Alpha的写入,1为开启,0为关闭。

COLOR_MASK一般情况不会单独使用,会和其他命令,例如BlendFunc和一起使用。

COLOR_MASK 命令可以允许或禁止对颜色缓冲和alpha缓冲的写入。这个技术首先将图形“绘制”至alpha缓冲中,之后使
用BlendFunc(DST ALPHA, ONE) 实现对屏幕上所有像素的混合模式绘制。在绘制时,只有alpha缓冲非零时才会被绘制出来。

同样以画一个圆环为例。

首先用COLOR_MASK 命令禁止对颜色缓冲写入,之后向BlendFunc 写入一个可以把之后的alpha值直接写入alpha缓冲的参
数。设置方法是将源混合因子设置为ONE:

    ftWrDispCmd(COLOR_MASK(0, 0, 0, 1));
    ftWrDispCmd(BLEND_FUNC(ONE, ONE_MINUS_SRC_ALPHA));
    ftWrDispCmd(BEGIN(FTPOINTS));
    ftWrDispCmd(POINT_SIZE(90 * 16));
    ftWrDispCmd(VERTEX2F((PANEL_WIDTH / 2) * 16, (PANEL_HEIGHT / 2) * 16));

这里画了一个大小为90pixel的圆(即外部圆形),它并没有显示到屏幕上,只会影响alpha缓冲。

绘制内部圆时需要将混合模式设置为覆盖之前已经绘制的所有像素,即将源混合因子设置为ZERO:

    ftWrDispCmd(BLEND_FUNC(ZERO, ONE_MINUS_SRC_ALPHA));
    ftWrDispCmd(POINT_SIZE(80 * 16));
    ftWrDispCmd(VERTEX2F((PANEL_WIDTH / 2) * 16, (PANEL_HEIGHT / 2) * 16));

这一步是将之前那个外部圆形内部的内圆显示内容消掉。

经过以上的操作之后,目前还没有任何内容能在屏幕上可见– 因为COLOR_MASK 命令禁止了对R,G,B通道的绘制。但是在alpha缓冲上,已经有了一个圆环。

最后是设置COLOR_MASK的颜色通道使能,源混合因子设置为了DST ALPHA, 这样一来,透明值的大小就来自于alpha缓冲
了。

    ftWrDispCmd(COLOR_MASK(1, 1, 1, 0));
    ftWrDispCmd(BLEND_FUNC(DST_ALPHA, ONE));

    ftWrDispCmd(POINT_SIZE(90 * 16));
    ftWrDispCmd(VERTEX2F((PANEL_WIDTH / 2) * 16, (PANEL_HEIGHT / 2) * 16));

显示结果如下图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值