您现在的位置: 电玩巴士 >> GBA >> 掌机学院 >> 掌机开发 >> 文章正文

GBA探索日记(三):Color Special Effects

我们知道在游戏中做Alpha混合和Fade-in/Fade-out等颜色特效是十分消耗CPU.对于GBA这样的16.78MHzCPU就更显得费劲.不过还好,GBA提供了硬件上对这两种颜色特效(Color Special Effects)的支持.所以你就不用担心这些问题了.

 

1.Alpha混合

首先你应该知道什么是Alpha混合.其实就是透明处理.

其处理的算法就是

R=R1*alpha+R2*(1-alpha);

G=G1*alpha+G2*(1-alpha);

B=B1*alpha+B2*(1-alpha);

其中alpha是个小于等于1的小数.R,G,B是混合后的点的RGB,R1,G1,B1R2,G2,B2分别是两个要混合的点的RGB.

由于一张图片有好几千到好几百万个点,而每个点又包含三个浮点运算,所以这中Alpha混合的计算量是很巨大的,计算速度就是个很严重的问题.

GBA中有对Alpha混合的硬件支持,你只需对相关的寄存器设置好参数,然后它就会自己来帮你计算,由于是硬件上的计算,所以速度问题就解决了.

下面我们就直接看看如何设置Alpha混合的寄存器.

AgbLib中定义了下面两个寄存器

#define REG_BLDCNT      (REG_BASE + 0x50)   // Blend Mode Control

#define REG_BLDALPHA    (REG_BASE + 0x52)   // Semi-transparent Parameter

 

其中涉及到REG_BASE,它是寄存的开始地址,你可以看看它的总线地址

#define REG_BASE                0x04000000          // Registers

 

REG_BLDCNT是设置颜色特效(Color Special Effects)参数的寄存器.它不仅控制Alpha混合,还控制后面讲的Fade-in/Fade-out的设置.

AgbLib中的官方文档中是这么说的这个寄存器的

The types of color special effects and the target pixels, are determined by the BLDMOD register.

可以看出,REG_BLDCNT0-5位是设置第一个混合目标(1st Target Pixel)的范围,

[1] [2] [3] 下一页

相关文章:
【编辑:admin】  【文章来源:tangl_99 金点时空】  【更新时间:2004-12-31 4:05:07】
巴士全站中的精华
24小时热点推荐
我们向您隆重推荐的内容