斜视角图形引擎的设计

[下篇:视角的选择和坐标变换]


Dec 13 WIP版本(基于Allegro3.0+WIP) [源码+EXE(442K)][对Allegro的修改(64k)]

经过好几个月的理论准备, 云风决定自己写一个第三人称斜向固定视角的图象引擎. 一边写一边将我在实践中学习到的知识和经验奉献给和我有着相同目标的朋友;-) 希望我们的游戏产业能尽快跟上世界.

我将要设计的东西称作"第三人称斜向固定视角"(以下简称"斜视角"),想必大家能够 想象出将是个什么样子. 在《创世纪》,《仙剑奇侠传》里都使用了这个视角, 并取得了成功. 而它们使用的那种图形引擎在英文中叫做 Isometric Tile Engine. Tile 直译是砖块的意思,就是指游戏中的场景和人物都是以一个个砖块为单位 描述的. 目前的许多 RPG, SLG 游戏都是这样. 就直观的视觉效果来说又分两种, 按一般玩家的说法, 90 度视角的和斜45度视角的. Isometric 形式就是通常 提到的斜 45 度视角, Isometric 这个词,有等轴(晶体),等容,等积的意思, 如果你玩过《超时空英雄传说》,或是《X-COM I/II》这类战棋游戏, 见过游戏里面框住人物的光标,就会感到 Isometric 这个词用的是多么准确;-) 因为这个词强调的是等轴, 所以 Isometric 并没有说明视角一定是 45 度的 (关于视角的选择,下文将有详细论述); 另一种 90 度的形式, 国外称之为 Rectangular Tile Engine, Rectangular 就是直角的意思了. 这种直角砖块的处理给程序的实现带来许多好处, 最大莫过于遮挡的计算了, 在计算机 CPU/ 显卡速度还很慢的年代, 甚至是 RPG 唯一的表现手段, 对于目前有的游戏还采取这种形式, 我感到不可理解, 难道是程序员功力不够? 无论美工多么厉害, 90 度的平面世界的表现力和真实感是远不能满足现在的玩家的.

这里,没有使用 Isometric 或是 Tile 这些名词,是因为我所构想的表现形式是不同的, 除了外观上采用和 Isometric 相同的斜视角, 在内部数据结构,和实现方法, 绘制顺序,遮挡计算等方面都将超出传统. 将使用的是无大小限制,角度限制, 的物体及无规则的场景, 而其中人物运动的方向也是任意的, 这些好象更接近 3D 一些, 但我的目的是避免和多边形,贴图,等打交道,在中档次的计算机上有个 理想的效率,而腾出更多的 CPU 时间去完成更复杂耗时的 AI 处理,和产生图象特效. btw, 我想这种设计英文可以称作 "Leaning View",请问有没有专业一点的译法?

云风的工作刚刚开始, 写这个系列文章和引擎的开发基本同步, 而且是没有什么 实践经验, 所以错误在所难免, 文章可能也会反复修改甚至将以前的东西 全部推倒重来. 其中所有的观点,算法属于云风个人的看法, 欢迎批评指正, 可别动不动就说我在误人子弟哟 ;-)

OK. 废话少说, 让我们开始迈开第一步.