前两天为大家介绍了处理透明光影效果的 Alpha-Blending 技术,今次我将再为大家介绍其它几种常用的像素混合方法,这些方法一般在游戏中被用来处理光影效果。

『Alpha-Blending』

  前次已经说了,所谓 Alpha-Blending,其实就是按照“Alpha”混合向量的值来混合源像素和目标像素,一般用来处理半透明效果。

『Additive-Blending』

  至于 Additive-Blending,就是用饱和相加的方法来混合源像素和目标像素的颜色分量。一般用来处理光源,比如说爆炸的火光等等。下面就来看看两个像素间的 Additive-Blending 过程。

  第一步,先把源像素和目标像素的 RGB 三个颜色分量分离,然后把对应颜色分量相加,如果某分量的结果超出了该分量的最大值,则对该分量作饱和运算(即如果结果超出了允许的最大值则取结果为允许的最大值),最后把三个颜色分量重新合成为一个像素输出。

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

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

unsigned long tdest = 0;
unsigned long t;

t = (*source & RMask) + (*dest & RMask);
if(t > RMask) t = RMask;
    tdest |= t;

t = (*source & GMask) + (*dest & GMask);
if(t > GMask) t = GMask;
    tdest |= t;

t = (*source & BMask) + (*dest & BMask);
if(t > BMask) t = BMask;
    tdest |= t;

*dest = (unsigned short)tdest;

  这段代码使用了一个小技巧来处理饱和运算,即结果用位掩膜值来衡量是否要作饱和运算处理。

『Subtractive-Blending』

  同 Additive-Blending 正好相反,Subtractive-Blending 就是用饱和相减的方法来混合源像素和目标像素的颜色分量。FreeMind 很喜欢用它来处理阴影,用这种方法处理出来的阴影效果能够很自然地同环境相融合。

  至于 Subtractive-Blending 的处理过程,同 Additive-Blending 很类似,我就不罗嗦了。唯一要注意的是当用目标像素的颜色分量减去源像素的颜色分量时,如果结果小于允许的最小值则结果取为允许的最小值(通常为零)。

『其它混合方法』

  玩过 PHOTOSHOP 的人都知道,其实像素间的混合方法还有很多种,比如 multiplicative,divisive,maximum,minimum 等等,但这些方法运算相对较慢,而且游戏中对这些效果的要求也比较少,所以在实际的游戏中使用得很少。

  如果您还有什么新的思路和好的想法,不妨也通知俺一声,好东西也让大家分享一下嘛,呵呵 :)

几种常用的像素混合方法相关推荐

  1. 10种常用的网络营销方法

    网络营销产生于20世纪90年代,发展至今已演变出越来越多的营销方法,在国内随着互联网影响的进一步扩大,人们对网络营销认知的进一步加深,网络营销方法手段也是各种推陈出新,下面就介绍如今网络营销最常用的1 ...

  2. **10种常用的网络营销方法**

    **10种常用的网络营销方法** 网络营销产生于20世纪90年代,发展至今已演变出越来越多的营销方法,在国内随着互联网影响的进一步扩大,人们对网络营销认知的进一步加深,网络营销方法手段也是各种推陈出新 ...

  3. 计算机中十二种常用密码的破解方法(转)

    计算机中十二种常用密码的破解方法(转)[@more@] 在日常操作中,我们经常要输入各种各样的密码,例如开机时要输入密码,QQ时也要先输入密码,假如你忘记了这些密码,就有可能用不了机器.打不开文件.不 ...

  4. 特征工程:8种常用类别型数据处理方法

    8种常用类别型数据处理方法

  5. 几种常用时钟分频实现方法

    在我们学习中,常常需要对时钟进行分频处理,本文将介绍几种常用分频方法. 一.2的整数次幂分频 这种分频很简单,只需要设置一个计数器,对计数器进行计数,计数器的第i位则对应的2的i-1次幂分频.此方法适 ...

  6. 产品经理懂点技术:几种常用的系统开发方法

    常用的系统开发方法有: 结构化系统开发方法 原型法 面向对象方法 计算机辅助软件工程方法 下面一一为大家详细介绍: 1 结构化系统开发方法 结构化系统开发方法(Structured System An ...

  7. 几种常用的数组遍历方法

    整理一下常用的几种遍历方法,for和while循环就不再说了,说一下其他几种非常好用的方法 1.for in  for in可定是接触比较早的遍历数组的方法,其实它也可遍历对象(遍历字符串也是可以的! ...

  8. 几种常用的文件加密方法

    下文是中软通用产品研发中心陈尚义根据http://blog.sina.com.cn/s/blog_611c36a80100gch7.html?tj=1编译. 每个人的电脑硬盘中都会有一些个人隐私或秘密 ...

  9. 总结几种常用的单片机加密方法

    总结前人的经验,摸索着写一点实用的方法,供大家参考:在这里不讲加密算法,只讨论结合软硬件的加密方法,总结了一下大该有以下几种: 一.加密方法 1.烧断数据总线.这个方法我想应不错,但应有损坏的风险,听 ...

最新文章

  1. Android伍什小随笔(二)- 更新中
  2. 【数据竞赛】这篇文章送给想要学习特征交叉的朋友。
  3. linux 释放cache 内存
  4. 多选Select排序
  5. P2467-[SDOI2010]地精部落【dp】
  6. 【网络流】人员雇佣(luogu 1791)
  7. OpenCV文档阅读笔记-inRange官方解析及实例
  8. OpenGL ES 加载3D模型
  9. 计算机专业盲打,在win7系统电脑练习盲打的方法
  10. element 修改表单值后表单验证无效_element 表单自定义校验规则
  11. armbian php ldap,N1刷Armbian后刷Seafile7.1.5做家庭云盘提要
  12. 网络工程师Day7--本地AAA配置
  13. 中国石油大学(北京)-《钻井液工艺原理》第三阶段在线作业
  14. 大学计算机技术导论,北京邮电大学计算机学院网络技术导论第一章资料.ppt
  15. 计算机24点游戏音调,24点游戏,任意点游戏在线计算器,4个数加减乘除算24点,任意点_三贝计算网_23bei.com...
  16. css淡入动画,使用CSS淡入大动画效果
  17. ..以前似乎用作函数或命令,与其在此处作为变量名称的用法冲突?
  18. 华为手机桌面角标开发
  19. Python数据处理
  20. php deel views,全量修改文件App名称和改动views位置设置

热门文章

  1. esxi能直通的显卡型号_虚拟黑群也可以NVMe加速?还能万兆?wa!
  2. 关机提示错误(已解决) 0x0074006e指令引用的0x0074006e内存不为read
  3. Best Fitting Hyperplanes for Classification(用于分类的最佳拟合超平面)
  4. 看了下面的关于大亚湾核电站的一些报道,我终于明白为什么老弟在惠阳买的房子会这么便宜了
  5. Vue调用后台接口渲染列表
  6. [云炬学英语]每日一句2020.8.30
  7. 协鑫集成第二批1000台E-KwBe光伏储能设备即将启运澳洲
  8. Hbuilder在浏览器里不显示内容
  9. EL表达式中fn函数的强大功能,很简单,很好用,很强大
  10. 微型计算机的主要性能指标(),微型计算机的主要性能指标