2D 游戏中有许多技巧来获得比较好的视觉效果, 使游戏更加吸引人. 最常见的是使用 Alpha 通道来做光影, 好象被人用烂了 ;-) 我们需要来点新奇的东西?
留意 Starcraft, C&C II 等新点的游戏中都使用过一种,爆炸后地面波动起伏的效果. 下面我们来实现它:
首先是对 2D 平面做一些变形. 让人感受到立体的感觉. 算法是非常简单的, DXGuide 主页上有篇专门的文章讲解 图象扭曲算法. 这里我就偷懒不写了 ;-) 这里要实现特定的效果, 关键在于变形网格的制作. 简述下云风的方法: 在 3dmax 里制作一个平面. 单位多边形网格为 1:2 的长方形. 这里我制作了一个 15x7 格大小的平面, 选择正中间一格让它凹陷. 注意, 为了处理方便, 我们是从扭曲的网格向方形网格映射, 而不是 3D 引擎中常用的从方形纹理向三维空间的多边形映射. 所以我们需要的变形网格还需要旋转 180 度, 也就是说, 当要做凹陷效果时, 网格数据是凸起的. 然后旋转摄象机 30 度, 关闭透视矫正 (一般我们的 2D 游戏都使用这个视角, 不是吗?). 我想你还记得前面我们的单位网格是 1:2 的长方形, 现在它们看起来是 1:1 的正方形了. 将这张图 render 出来, 记得只 render 方的框架, 好象左边你看到的那张图一样. 这张图是被缩放到 240x112 大小的, 刚好满足每个格子的面积为 16x16. 记得格子的边长必须是 2 的整数次幂哟, 这关系到变形算法的速度. ok, 使用你能想到的方法取出图上的格子的顶点. (我自己写了个小程序, 计算机辅助人工记录每个顶点) 下面就可以扭曲 2D 图形了.图一
图二
这样做出来的效果(图一)会让人感觉怪怪的, 好象隔着一个凹镜看着图片, 而没有凹陷的感觉. 为什么呢? 因为当地面下陷的时候, 光线也会随着变化. 所以我们还需要有一个光照图. 看右边这张图, 坑的左边比较暗, 右边比较亮. 处理的时候, 我们把四角作为基本亮度, 比基本亮度小的地方, 减去相应的亮度; 比基本亮度大的地方, 加上对应的亮度值. (这个处理在风魂的下个版本将提供) 经过这个光线处理步骤. 效果就相当真实了 (图二 ;-) 你可以下载云风做的一个 简单的例子(70k). 源码由于使用了 风魂 正在开发的下一个版本, 所以暂不提供.