人气 232

[行业观察] Alpha-Blending 技术简介 [复制链接]

九艺网 2017-3-10 17:00:54

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
  现在的游戏,不管是 2D 还是 3D 的,为了追求透明光影效果,通常都会使用到 Alpha-Blending 技术。下面,我们将谈论什么是 Alpha-Blending 技术并简单介绍 Alpha-Blending 技术的具体算法。

  所谓 Alpha-Blending,其实就是按照“Alpha”混合向量的值来混合源像素和目标像素。为了便于理解,我们就从两个像素间的 Alpha-Blending 过程谈起吧。

  第一步,先把源像素和目标像素的 RGB 三个颜色分量分离,然后把源像素的三个颜色分量分别乘上 Alpha 的值,并把目标像素的三个颜色分量分别乘上 Alpha 的反值,接下来把结果按对应颜色分量相加,再对最后求得的每个分量结果除以 Alpha 的最大值(通常这一步都是用移位来完成,这亦是 Alpha 的最大值为何总是二的幂的原因),最后把三个颜色分量重新合成为一个像素输出。

  在这个过程中,为了分离像素中的 RGB 三个颜色分量,我们一般会使用掩膜的方法。至于具体的三个掩膜值:RMask、GMask 和 BMask,可以从 DirectDraw 中的 DDPixelFormat 返回得到(当然,你也可以根据自己的需要做各种灵活处理)。

  在下面给出的说明性例程中,我们假设 RMask、GMask 和 BMask 已经存放的是 RGB 三个颜色分量的位掩膜值,Alpha 的最大值为 256,而 source 和 dest 是指向源像素和目标像素的指针。

int ialpha = 256 - *alpha; // Alpha 的反值

*dest = (RMask & (((*source & RMask) * *alpha + (*dest & RMask) * ialpha) >>8)) | (GMask & (((*source & GMask) * *alpha + (*dest & GMask) * ialpha) >>8)) | (BMask & (((*source & BMask) * *alpha + (*dest & BMask) * ialpha) >>8));

  终于明白什么是 Alpha-Blending 了吧?很简单不是,快去编程一试吧。如果大家感兴趣,下次再为大家介绍几种别的混合方法。请期待『几种常用的像素混合方法』。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-28 17:54 , Processed in 0.132702 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.