GameRes游戏开发资源网 http://www.gameres.com

 

 

再论游戏中特效显示原理与Alpha通道的应用

 

作者:王红奇

 

看了许多的游戏开发网站,没有多少关于alpha混合原理的介绍,有的话也没有提供一些源代码公读者进行测试。最近看了GameRes游戏开发资源网里面的一些文章,也解释的不甚详尽。现在,刚刚对游戏开发入门的读者有福了,本文不仅将详细介绍alpha混合的原理,还包括实现代码奉献给大家,还有不少篇幅关于alpha通道文件的制作。相信一般读者看了本文后,基本上能够明白那些炫目的游戏特效是如何实现的;并且在我们自己开发的一些小游戏中也不需要动用那些复杂的DIRECTXOPENGL等等的内容。

 

下面请看本文的详细内容:

还是先讲一下alpha贴图是如何制作的吧,其实也很简单,用photoshop软件制作完如图片1所示的炫光特效后,保存该图片作为图片1(具体方法为“文件”-“保存”,然后选择“格式”当中的BMP格式(为方便本软件的测试,所以选择这种格式,当然了,你知道原理后也可以改成其他文件格式);下面制作alpha通道文件,其实也很简单,你执行如下菜单命令:图像-模式-灰度,然后保存为BMP格式文件。你也可以在我们提供的软件包中得到该文件。

 

如果你使用的DELPHI7这个编程环境,恭喜你,你现在立即可以打开我们附送的软件包内的工程文件进行测试。如果你不熟悉DELPHI7,对Visual Studio6 C++熟悉的朋友,我们为你提供了一个.EXE文件,让你也可以看看最直接的效果(呵呵),你可以打开软件包中的Unit1.pas查看具体的实现代码。

 

现在我们来分析一下代码吧!

  for i := 0 to image1.height - 1 do    //图片4的高度

  begin

    for j := 0 to image1.Width - 1 do  //图片4的宽度

    begin

      //alpha

       r := GetRValue(image2.Canvas.Pixels[i, j]); //取得 alpha(图片2)通达某个颜色分量

      //g := GetGValue(image2.Canvas.Pixels[i,j]); //因为rgb都相等的

      //b := GetBValue(image2.Canvas.Pixels[i,j]); //所以取其中的任意一个

 

      r1 := GetRValue(image1.Canvas.Pixels[i, j]);// 取得(图片1RGB颜色分量

      g1 := GetGValue(image1.Canvas.Pixels[i, j]);

      b1 := GetBValue(image1.Canvas.Pixels[i, j]);

 

      r2 := GetRValue(image3.Canvas.Pixels[i, j]); // 取得(图片3RGB颜色分量

      g2 := GetGValue(image3.Canvas.Pixels[i, j]);

      b2 := GetBValue(image3.Canvas.Pixels[i, j]);

 

      r2 := (r1 * r + r2 * (255 - r)) div 255;  //这个是alpha的混合公式

      g2 := (g1 * r + g2 * (255 - r)) div 255;

      b2 := (b1 * r + b2 * (255 - r)) div 255;

 

      image4.Canvas.Pixels[i, j] := RGB(r2, g2, b2); //合成图片4,进行混合显示

    end;

  end;

 

好了,通过简单的代码分析,你一定可以理解图片4是如何得到的,如果你在具体的操作过程中不能得到上面的效果原因大致如下:

 

我们要求上面得三张图片格式,大小一致(要求24位的BMP文件,这是为了方便我们进行演示而作的规定)。

 

最后再啰嗦一句:其实在一般的小游戏中你只要熟悉了其中的一些原理,大可不必使用directxopengl等等工具,就像上面的代码经过优化,游戏画面的帧频绝对可以做到符合你的要求。

 

最后声明:

1.本文以及所附带的软件包仅特供给GameRes游戏开发资源网!其他需要此文的单位必须保留本作者的联系QQ

2.如果你确实需要C++的版本请联系我们。

 

附件:http://dev.gameres.com/Program/Visual/2D/DelphiAlpha.zip 1.4MB

 

 

作者:王红奇

GameRes游戏开发资源网 http://www.gameres.com