斜视角图形引擎:它适合你吗?

      翻译 2005-2-18 19:23
说到斜视角图形引擎,可追溯到早期的图形化电脑游戏。《Fairlight》、《上帝也疯狂(Populous)》及较近期的《暗黑破坏神(Diablo)》等游戏使它闻名。它仅通过对位图的绘制便展现出一个三维的场景。本文中我将谈谈何谓斜视角图形引擎、如何使用它、以及我们为什么需要它。

斜视角的含义是什么?

所谓斜视角,即一种透视法,它能使3轴上的3条等长的线段在视觉上显得相等。简单来说就是,如果你有3个1英尺的棍子,一根朝上放,一根的朝向远离你,一根指向你的右侧,那么从你的视角上看它们是等长的。这种透视法被称为1:1透视,因为在2D格式中它的长与宽是相等的。下图是这种透视法的效果简图:

在电脑中,斜视角的应用与其定义有所不同。尽管其含义基本相同,但是大多数的游戏并不使用1:1的比例进行透视。很多游戏使用2.1:1的透视比例,是因为这样可使玩家感觉他在俯视整个场景。这比用来解释斜视角的1:1透视效果通常要更好。

什么是斜视角图素系统?

通常当一款游戏使用了类似斜视角的透视法时,人们会认为那是一款斜视角游戏。绘制斜视角式的2D图素有很多种方法。第一种方法是绘制一个矩形图素,但是图素中的图像是用斜视角的方法绘制。第二种方法是绘制菱形的图素,然后将它们平滑的连接起来。参见下面的图例:


上图中我们可以看到几个连接在一起的菱形图素。我将它们涂上色差很大的颜色,以便使你从俯视的角度看它们是方形的。

这就是你使用斜视角图素系统所产生的效果。

使用斜视角图素系统有什么好处?

对于开发者来说,唯一使用斜视角图素系统的理由是游戏中需要绘制大量的墙壁。因为这种引擎可以很轻易的绘制出墙壁,菱形的图素使得墙壁的边缘可以很轻易的连接在一起。在互联网上,有很多解释斜视角图素系统的教程。你可以通过搜索关键词“isometric tile game programming”很轻易的找到它们。


在上图中,我添加了一个从透视角度看起来像墙壁的四边形。你还可以很简单、轻易的添加天花板、悬垂物,甚至任何属于墙壁的物件。这就是为什么开发人员更倾向于用这种方法开发角色扮演类游戏(RPG),因为它们的场景中通常有许多墙壁,比如说地牢。

斜视角图素系统还允许你轻松处理墙壁与角色的重叠问题,你只需将墙壁绘制在角色之上,角色便显得距离很远。虽然你仍需要对角色进行处理,但是比对所有的角色以及墙壁都进行处理要简单的多。在使用墙壁的情况下,斜视角图素系统会节省你的时间。

我不需要斜视角图素系统的理由是什么?

不使用斜视角图素系统的第一也是最重要的原因是,处理图素之间的场景衔接问题很困难。处理矩形图形时,美工只需简单的检查边界,看其是否衔接的很好。如果要使用斜视角图素系统,不但要处理相邻图素之间的对应边,而且还要进行像素的拼接,同时他还要将画画成菱形,以使其看起来像似经过旋转的方形。处理上述这些工作曾是极困难的事,常使美工变得非常的困难。

如果你只想绘制方形物组成的地板,那么你不需要考虑这些。若尝试如草地等更接近自然的场景,则是费力费时的事。

斜视角图形引擎通常比砖块式图形引擎更难编程。你需要进行一些运算来判断图素绘制的位置,以及光标所在的图素的位置。这可能会有一些难度,且需花费你1周左右的时间来完成。所以如果从斜视角引擎中的获益不是很大,那么只是在浪费时间。

我该怎样做?

这取决于你想做的游戏的类型。如果你的游戏中有很多的墙壁,那么斜视角图形引擎是个很好的选择。它可以简化墙壁的绘制,使游戏自然地看起来像是3D游戏。

如果你的游戏中用不着很多的墙壁,只是制作现实中的场景,那么就没必要使用斜视角图形引擎,否则只会使图像变得更糟,还要克服更多的困难。你只需要简单的将图片用斜视角透视法的方法绘制出来即可。

在你开始制作游戏前,进行引擎的选择是很重要的。我曾经花费3周的时间为我的游戏《Force Recon》制作一个斜视角图形引擎,但我最终发现那只会使工作变得更困难,使图像变得更难看。

=========================================================

作者:Geoff Howland
出处:http://www.lupinegames.com/articles/isoeng4u.htm

译者:张戴维
译者Blog:http://www.5DBlog.com/user1/Davidz

=========================================================
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}