室外大场景渲染技术研究与实现 游戏地图加载

时间:2012-11-08   来源:   网友评论:0   人气: 618 作者:

第三章 室外场景地形的实时绘制技术

  地形的绘制是指读取虚拟世界的地图信息,绘制出场景的地表,并实现角色在场景中实时漫游。它是室外场景实时绘制中最重要的部分,也一直是计算机图形学中一个重要的研究领域。尽管地形的绘制在不同的游戏中所采用技术会有所不同,但是他们总体上还是遵从一定的流程,如图3.1所示:

  以下章节会逐步分析相关技术。需要说明的是本章探讨的“绘制”还不包括真实感的表现,可以理解为线框模式下的绘制。

  3.1地形绘制所需数据

  地形绘制所涉及的数据主要有:地形的高度图、缩放标尺、地表纹理图、地表纹理索引等。在游戏设计中,表现一个场景所需要的一系列数据往往打包放在一起。

  3.1.1高度图

  对基于三角形面片渲染的3D场景来说,地形的顶点信息就是指组成地形的所有三角形面片每个顶点的三维坐标。最简单最有效的地形顶点表示方法是使用高度图(heightmap)u利。

  通常高度图是一张灰度图,它的长宽通常满足(2^n+1)。每个像素的灰度值表示地形相应位置的高度值,用连续的三角形面片来连接这些三维空间中的顶点就构成了地形的面片。高度值的值域范围0--255足以表现游戏中场景的地形起伏,如果需要也可以使用双字节,四字节或更高来描述高度值。在设计中很多游戏由于封装数据的需要,通常自定义高度图的格式,而不采用灰度图,但是其存储的数据本质上是一样的。

  3.1.2缩放标尺

  地形信息还应包括缩放标尺,用来表示在绘制时高度图中相邻两个灰度值之间相隔的X,Z方向上的距离值。比如一张33×33的高度图的缩放标尺是l米,则在游戏中我们可以看到一个32MX 32M大小的场景。此外,在Y方向上也有一个缩放标尺,负责地形高度的缩放。

  3.1.3顶点法向量

  地形网格上的各点都需要一个表面法向量。它可以用来计算光照,进行背面剔除,检测与表面的碰撞等。一个三角形的法向量可以通过三角形上两向量叉乘的方法轻松获得,而顶点级法向量可以通过共享此顶点的所有三角形的法向量求平均值来模拟,在很多情况下,这样的效果已经能够达到要求了。顶点处其实是没有法向量定义的,因为此处网格表面不连续。

  3.1.4多种地表纹理及光照贴图

  为了表现地形的真实感,目前游戏中的做法是通过多重纹理混合贴图来实现的。其中用到的贴图通常以各种图片格式保存。关于这种技术的讨论在真实感渲染章节会详细介绍。

  3.1.5单个场景地形的数据结构

  由以上的分析我们就可以得到单个场景地形的数据结构,如下所示:


  3.1.6面片的构成

  任何多边形模型都可以转换成三角形的集合,所以地形网格也是三角形的集合。如果三角形被各自独立地送至图形硬件进行绘制,共享的顶点数据就需要执行重复冗余的运算,并且相同的数据还被传送至少两次以上。降低这些额外开销的一个方法就是把彼此相邻的三角形构建成三角带(strip)。首先,把第一个三角形的三个顶点放至strip之中,然后将其余的三角形顶点依照相邻顺序依次放至strip中,每个三角形只需要加入二个顶点。缺省条件下,在strip中彼此相邻的顶点都构成了连接两个相邻三角形的公共边。如果连接规则(顺时针或者逆时针顺序)需要发生改变,则可以使用swap命令交换顶点顺序,或者重新将某一个顶点放入strip之中。扇形三角形带(Triangle fans)可以看作是三角带的一种退化形式,只是其中所有的三角形都共享一个公共顶点。图3.2是三角形带的表示方法:

  V0,V1,V2,V3,V4五个顶点构成了表示三个三角形的三角形带。注意描述三角形带时,顶点的顺序很重要,因为是遵循一定连接规则(顺时针或逆时针)的。在OpenGL中生成最右方的三角形带的代码如下:

  3.2 LOD地形网格简化算法的基本思想及意义

  所谓地形网格的简化是指通过算法减少提交到显卡的顶点,以减少每帧同屏渲染的三角形数量,借以提高渲染速度。


 

文章评论