首页 > 代码库 > ActionScript3游戏中的图像编程(连载七十四)

ActionScript3游戏中的图像编程(连载七十四)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477

 

4.3.1 ColorMatrixFilter与ColorTransform的功能比较


      如果说ColorTransform是田忌的加减法,那么ColorMatrixFilter就是孙膑的乘法了。所以,ColorMatrixFilter与Matrix变换和士兵调度的行为一样,都充分调动了矩阵中各个元素之间的互动,使得色彩的变换方式更加灵活,策略也趋于多元化,从而实现出比ColorTransform更丰富的效果。


      图 4.20是我在Flash IDE里制作的鲜橙味水果糖字体。

 

图 4.20 在Flash IDE里制作的鲜橙味水果糖字体


      现在我想用变色的方法直接生成其它口味的糖果,我分别用ColorTransform和ColorMatrixFilter来实现,效果如图 4.21和图 4.22所示。


 
 

图 4.21 经ColorTransform处理过的彩虹糖字体

 

图 4.22 经ColorMatrixFilter处理过的彩虹糖字体

      无论从色彩,光感,还是纹理等角度来看,ColorMatrixFilter调出来的版本都比ColorTransform要自然得多,不像ColorTransform的那么生硬(不过ColorTransform版本还挺有彩虹橡皮糖的感觉)。而且,ColorMatrixFilter几乎可以完美支持ColorTransform的所有变换(为什么说“几乎”,因为虽然原理一致,但处理方式存在着微妙的差异,稍候您将会看到),我们以redResult为例,考察它们俩的运算公式:


      redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA)+a[4]
      redResult  = redMultiplier * srcR + redOffset


      对照便可得出,a[0]=redMultiplier,a[1]=a[2]=a[3]=0,a[4]=redOffset。


      用同样的方法对照其它3个通道,可得出ColorTransform的变换矩阵:

 

     


       根据矩阵乘法的运算法则,第1个矩阵第n列的数会和第2个矩阵第n行的数进行相乘,所以colorTransform中的Multiplier变量全部都位于矩阵的第n行第n列,即都在主对角线上,而offset变量则全部位于最后一行。


      废话少说,我们把ColorTransform中用过的实例搬到这里来实践一下。

 


 

ActionScript3游戏中的图像编程(连载七十四)