Alpha混合 与 淡入淡出
这里是说明GBA的颜色特效的设置方法,如果有什么说得不好的请大家多包含。
有什么说错的东西的地址就要大家帮我改改了。
Alpha混合:对两个选择的表面执行16级的半透明处理。
淡入淡出:对一个选择的表面执行16级的亮度处理。
这几个效果的目标由BLDMOD寄存器指定的
地址:0x4000050h寄存器:BLDMOD属性:读/写初始值:0x00h
____________________________________________________________________
│15│14│13│12│11│10│9│ 8│ 7│ 6│5│4 │ 3│ 2│1│ 0│
│ X│X │F │E │ D│ C│B│ A│Y │ Y│F│E │ D│ C│B│ A│
底8位是第一目标,高8位为第二目标
A:BG0
B:BG1
C:BG2
D:BG3
E:OBJ
F:BD(底幕)
YY = 00
没有特效:通常不执行特效,只有存有半透明OBJ并且是紧随在第二目标之后就执行16级半
透明处理。
YY = 01
Alpha混合:如果第一上目标紧随在第二目标之后,执行16级半透明度处理。当第一目标的
OBJ位为1,
对全部OBJ执行半透明处理,为0时只对半透明OBJ进行处理。
YY = 10
亮度增加:增加第一目标的亮度。当第一目标的OBJ位为1时,只对OBJ增加亮度。
当一个半透明OBJ有第一目标,总是会执行Alpha混合
YY = 11
亮度减少:减少第一目标的亮度。当第一目标的OBJ位为1时,只对OBJ减少亮度。
当一个半透明OBJ有第一目标,总是会执行Alpha混合
虽然可以通过BLDMOD寄存器来指定要操作的目标表面,但是这两个表面还要配合图层的优先
权限来设置。
另外,半透明OBJ是由OAM指定的,而BLDMOD是对全部OBJ有效。
颜色系数
Alpha混合的系数是由COLEV寄存器里的EVA和EVB决定的。亮度系数是由COLY寄存器里的EVY指定
的。
EVA、EVB和EVA的值是少于1的数,由一个整数乘以1/16所得到的。这个可能有些难明,要好好地
去领悟领悟。
地址:0x4000052h寄存器:COLEV属性:只写初始值:0x00h
____________________________________________________________________
│15│14│13│ 12│11│10│ 9 │ 8 │ 7│ 6│5│ 4│ 3 │ 2 │ 1 │ 0 │
│X │X │X │ B │B │B │B │B │X │X │X│A │A │A │A │ A │
B为EVB
A为EVA
地址:0x4000054h寄存器:COLY属性:只写初始值:0x00h
____________________________________________________________________
│15│14│13│12│11│10│ 9 │ 8 │7│6│5│4│3│2│1│0│
│X │X │X │X │X │X │ X │ X │X│X│X│Y│Y│Y│Y│Y│
Y为EVY
EVA、EVB、EVY的值与系数对应关系:
EVA、EVB、EVY的值系数
000000
000011/16
000102/16
000113/16
001004/16
001015/16
001106/16
001117/16
010008/16
010019/16
0101010/16
0101111/16
0110012/16
0110113/16
0111014/16
0111115/16
1XXXX16/16
公式如下:
Alpha混合:
显示颜色(R)=第一目标象素(R) * EVA + 第二颜色象素(R) * EVB
显示颜色(G)=第一目标象素(G)* EVA + 第二颜色象素(G) * EVB
显示颜色(B)=第一目标象素(B)* EVA + 第二颜色象素(B) * EVB
亮度增加:
显示颜色(R)=第一目标象素(R) +(31 - 第二颜色象素(R))* EVY
显示颜色(G)=第一目标象素(G) +(63 - 第二颜色象素(G))* EVY
显示颜色(B)=第一目标象素(B) +(31 - 第二颜色象素(B))* EVY
亮度减少:
显示颜色(R)=第一目标象素(R) - 第二颜色象素(R)* EVY
显示颜色(G)=第一目标象素(R) - 第二颜色象素(G)* EVY
显示颜色(B)=第一目标象素(B) - 第二颜色象素(B)* EVY
好了,要说的都说完了,怎样实现就要自己想办法了,这里就不给出例子啦。