转载 Alpha-Blending 技术简介
2008-07-23 14:33
267 查看
现在的游戏,不管是 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 了吧?很简单不是,快去编程一试吧。如果大家感兴趣,下次再为大家介绍几种别的混合方法。请期待『几种常用的像素混合方法』。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
在计算机绘图中,一张图片使用4个管道来定义一张图片,其中的3个是主要颜色管道 - 红,绿,蓝。第4个叫做alpha管道,传达关于图片透明度的信息。它说明前景图片应该怎么与和自己覆盖的背景图片合并。
实际上alpha blending的名字来源于他的权重因数。权重因数是0-1之间的任意数值。当它为0时,前景是完全透明的。当它为1时,前景变成不透明并完全挡住背景图片。任何中间值会从两张图片中生成一个混合图片.
所谓 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 了吧?很简单不是,快去编程一试吧。如果大家感兴趣,下次再为大家介绍几种别的混合方法。请期待『几种常用的像素混合方法』。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
在计算机绘图中,一张图片使用4个管道来定义一张图片,其中的3个是主要颜色管道 - 红,绿,蓝。第4个叫做alpha管道,传达关于图片透明度的信息。它说明前景图片应该怎么与和自己覆盖的背景图片合并。
实际上alpha blending的名字来源于他的权重因数。权重因数是0-1之间的任意数值。当它为0时,前景是完全透明的。当它为1时,前景变成不透明并完全挡住背景图片。任何中间值会从两张图片中生成一个混合图片.
相关文章推荐
- Alpha-Blending 技术简介
- Alpha-Blending 技术简介
- Alpha-Blending 技术简介
- Alpha-Blending 技术简介
- Alpha-Blending 技术简介
- [技术学习]VST(Vim reStructured Text)简介(转载)
- 【转载】Windows完成端口与Linux epoll技术简介
- [转载]虚拟工作环境中的Openfiler存储技术简介
- Remoting技术简介(转载)
- (转载)J2EE开发技术简介之EJB
- AJAX技术简介及入门实例(转载)
- 手势识别技术的一个简介 转载
- (转载)J2EE开发技术简介之JBOSS
- Event Logging 技术简介(转载)
- 网络负载平衡转发技术简介(转载)
- Web开发技术的历史发展简介-转载
- HBase技术介绍简介 NOSQL数据库 入门(转载)
- 【转载】android核心模块和相关技术简介
- 网站和插件应用的结合(转载Google官网HTML技术简介)