分类:
2006-06-07 09:53:53
作 者 :樊一鹏
这些方法一般在游戏中被用来处理光影效果。 『Alpha-Blending』 『Additive-Blending』 第一步,先把源像素和目标像素的 RGB 三个颜色分量分离,然后把对应颜色分量相加,如果某分量的结果超出了该分量的最大值,则对该分量作饱和运算(即如果结果超出了允许的最大值则取结果为允许的最大值),最后把三个颜色分量重新合成为一个像素输出。 在这个过程中,为了分离像素中的 RGB 三个颜色分量,我们一般会使用掩膜的方法。至于具体的三个掩膜值:RMask、GMask 和 BMask,可以从 DirectDraw 中的 DDPixelFormat 返回得到(当然,你也可以根据自己的需要做各种灵活处理)。 在下面给出的说明性例程中,我们假设 RMask、GMask 和 BMask 已经存放的是 RGB 三个颜色分量的位掩膜值,三个颜色分量的最大值为 255,而 source 和 dest 是指向源像素和目标像素的指针。 unsigned long tdest = 0; t = (*source & RMask) + (*dest & RMask); t = (*source & GMask) + (*dest & GMask); t = (*source & BMask) + (*dest & BMask); *dest = (unsigned short)tdest; 『Subtractive-Blending』 至于 Subtractive-Blending 的处理过程,同 Additive-Blending 很类似,我就不罗嗦了。唯一要注意的是当用目标像素的颜色分量减去源像素的颜色分量时,如果结果小于允许的最小值则结果取为允许的最小值(通常为零)。 『其它混合方法』 如果您还有什么新的思路和好的想法,不妨也通知俺一声,好东西也让大家分享一下嘛,呵呵 :) |