当前位置:文档之家› 三维游戏技术解析

三维游戏技术解析

图形绘制流程由各个阶段组成,各个阶段之 间是串联关系,前一阶段的输出是下一阶段的输 入。流程图由下图所示:
VC++游戏编程——三维游戏技术
VC++游戏编程——三维游戏技术
物体层:
物体层的操作对象是场景的物体,它是输出一 系列的由顶点组成的几何基本元素(包括点、线、 三角形)。因此,物理层最重要的优化措施是减 少送入顶点层的几何元素的个数,常用的办法有 视域裁剪、可见性判断、优化顶点组织方式、细 节层次等。为了模拟客观世界的真实物体,通常 要在物体层进行场景的几何处理,如物体变形、 碰撞检测、用户拾取等,为了满足实时性的要求, 必须优化场景组织和几何设计算法。
VC++游戏编程——三维游戏技术
(1)模型和相机变换
为了建立场景的几何关系,所有模型将统一放置到世界坐标系中, 从建模坐标系到世界坐标系的变换叫模型变换。场景物体被变换到世 界坐标系后,再进入下一步将其变换到相机坐标系(观察坐标系), 这一步变换称为相机变换。
(2)逐顶点光照明计算:
光照明计算的几个要素包括光源、光源属性、光照明模型、物体 表面材质属性、纹理和物体表面几何属性(包括法向量、微几何结构) 等。最简单的光照明计算技术是在物体建模时指定每个顶点的颜色和 纹理坐标,在绘制时直接利用颜色和纹理映射融合出最终的颜色。这 种方式称为平坦渲染模式,它速度快,但是效果欠佳,是早期游戏中 最常用的方法。真正意义上的光照明计算必须指定光源本身的属性, 包括光源的类型、位置和光源的漫反射/镜面颜色,然后根据光照明 模型在物体的每个顶点上计算每个光源对该顶点的光亮度贡献,最后 在光栅化插值顶点上的颜色,这种处理模式称为Gouraud模式,是 图形引擎中的默认光照明渲染模式,著名的QuakeIII就使用了 Gouraud渲染模式。
VC++游戏编程
三维游戏技术
VC++游戏编程——三维游戏技术
第一节 三维图形学基础 一、三维场景的表达 三维场景的几何表示分三类:
多边形网格模型、曲面模型和离散模型。 1.多边形网格模型直接使用点、线段和多边形来逼
近真实的物体,结合光照明计算模型、表面材质 和纹理影射,多边形网格模型是游戏场景中最直 接、应用最广的几何表示方法。由于底层图形 API(如OpenGL、Direct3D)的基本绘制元 素是三角形,因此三角网格又是多边形网格中最 常见的表示方法。
VC++游戏编程——三维游戏技术
2.曲面模型具有以下优点:比多边形的描述更简洁;可以交 互调整;比多边形物体更光滑、更连续;动画和碰撞检测 更简单和快速。
在游戏建模中,越来越多的曲面作为基本的场景描述 手段,这主要体现在三个方面:首先,存储曲面模型耗费 的内存相对较低,这对控制台游戏特别有用;其次,整体 曲面变换比逐个多边形变换计算量更小;第三、如果图形 硬件支持曲面,从CPU传送到图形硬件的数据量将大大 低于多边形的传送数据量。当前的主流显卡都提供了多边 形网格模型与曲面模型之间的互换功能。当然,并不是所 有的自由曲线曲面都适合在游戏引擎里使用,只有简洁高 效的曲面表示才在实时绘制方面占有优势。
VC++游戏编程——三维游戏技术
图形绘制涉及两个最基本的概念:变换和光 照。变换的意义是将几何物体从三维空间中找到二维屏
幕上的位置,这其中包括一系列的坐标空间变换、裁剪、
消隐等操作。由于最普遍的三维模型是网格表示, 因此变换整个模型最终被分解为变换顶点的操作, 为了减少计算量,早期的图形绘制引擎逐顶点计 算光照,因此统称为顶点变换与光照。
物体坐标 模型矩阵
ModelView 变换
局部物体坐标
世界坐标 系
相机矩阵
世界坐标
相机坐标
投影矩阵
Device coordinates
视区矩阵 窗口坐标
窗口坐标系统
投影与裁剪
设备坐标
相机坐标
VC++游戏编程——三维游戏技术
二、真实感图形生成
图形绘制的主要功能是根据给定的虚拟相机、三维场 景、光源、光照模型和纹理等,在屏幕上生成(绘制)二 维图像。其中,场景物体在屏幕上的形状和位置由物体本 身的几何、相机的方位和参数而定。而物体在屏幕上的外 观则由物体材质属性、光源属性、纹理和设置的光照模型 决定。对于不同底层图形绘制API(如OpenGL和 DirectX),绘制流程的阶段和实现的功能基本相同,差 异在于各个阶段的实现细节。在游戏的图形绘制中,实时 性处在最重要的地位,实时性一般指每秒处理20帧以上, 交互性一般指每秒处理10帧以上。游戏编程者需要精通 图形绘制流程中的各个阶段和功能,但不必了解每个阶段 在图形硬件中实施的细节。例如,图形学中经典的三角形 扫描线填充算法已经完全固化到图形硬件中了,初学者可 以不必知道其中的具体实现细节。
曲面包括参数曲面、隐函数曲面和细分曲面。
VC++游戏编程——三维游戏技术
参数曲面:参数曲面易于离散为多边形网格 模型,也易于实现纹理映射。在参数曲面中重要 的一类非均匀有理B样条曲线(NURBS),特 别是Bezier曲面具有端点插值等多种良好的交互 性,广泛的应用于游戏的路径插值和人物建模中。
隐函数曲面:可以方便的表示球面、圆锥面、 抛物面和双曲面。
VC++游戏编程——三维游戏技术
顶点层:
实时绘制引擎中,顶点层的实施对象是顶点, 分为5个阶段,即:模型和相机变换、逐顶点光 照明计算、投影变换、裁剪和视区变换。其中最 重要的是计算空间顶点在屏幕上的位置。场景中 的物体是在世界坐标系或物体坐标系中建立的, 屏幕显示出的画面是在给定相机、相机方向和相 机内部参数后,场景物体在二维成像平面上的投 影,从世界坐标系到屏幕坐标系需要经历一系列 的变换,这些变换的嵌套统称为取景变换。
细分曲面:是利用一系列递归剖分规则将粗糙 的模型生成多尺度的精细光滑模型,由于目前底 层图形API纷纷支持细分曲面的实时绘制,细分 曲面在游戏中的使用已经很多。
VC++游戏编程——三维游戏技术
3.离散模型: 体素模型,使用一些基本体素如长方体、球、
柱体、锥体、圆环等,通过集合运算如并、交、 差等操作来组合形成物体。体模型的特点是布尔 运算非常简单,但存储量大,冗余性高。目前已 有一些游戏引擎专门使用体素模型。
相关主题