3D游戏引擎构架及游戏动画渲染技术

3D游戏引擎构架及游戏动画渲染技术
3D游戏引擎构架及游戏动画渲染技术

3D游戏引擎构架及游戏动画渲染技术

游戏引擎就是在对部分通用技术细节进行整理和封装的基础上,形成一个面向游戏应用的应用程序接口(API)[1]函数(称之为“引擎”),使得游戏开发人员不必再关心底层技术的实现细节,大大减少开发人员的工作难度和工作量,缩短开发周

即引擎仅仅在功能上支持某个方面的应期。引擎最大的特点就是具有“驱动性”,

用,但具体的实现细节则依赖于应用本身。其次,引擎具有“完整性”的特点,即引擎是能完整实现某个方面功能的函数集。第三,引擎还具有“独立性”的特点,即引擎可以不依赖于具体的应用而独立存在。游戏引擎一般包含渲染、编辑工具、物

理学、人工智能、网络等等。而游戏场景模块是游戏渲染最核心的部分。场景

模块作为游戏引擎的核心部分,是游戏开发者们调用最多的一个模块。为了进一

步提高游戏开发者们的效率、游戏引擎模块的高隐藏性和游戏引擎的可拓展性,设计一个好的游戏引擎显得至关重要。 2 Direct3D硬件访问方式Direct3D[8]是Microsoft的DirectX软件开发包的组件,它提供了对实时的、三维图形的支持,它的核心功能是提供一个与图形硬件的接口,结束了图形应用程序的设备相关性,从这个意义上来讲,它与OpenGL[9]是同一类的概念,目前,它已经与OpenGL一起成为了基于PC图形开发的两大工业标准,使计算机3D图形开发不再是极少数专业人员的专利,只要具备一定的图形学基础知识,就能利用DirectX SDK和OpenGL开发出自己的图形应用程序。通常的应用程序对硬件设备的访问是通过调用图形

设备接口(GDI)[2]来实现的。由于GDI的技术局限,使得应用程序不能高效地访问或操作硬件资源,难以用来开发复杂的三维应用程序如三维游戏、OpenGL和Di-rect3D,以提供了更专业的图形硬件访问接口,见图1。OpenGL的三维重建功能主要通过直接访问DD I来实现。由于DD I的通用性降低了对图形硬件的访问效率。Direct3D则提供了访问图形设备的立即模式,该模式通过硬件抽象层(HAL)获得更高效率。HAL还允许图形硬件在渲染、光栅化等方面保留自己独特的性能,从而获得更优化的显示效果。如右下图所示。3游戏动画的构成原理及动画渲染技术收稿日期:2008-01-10作者简介:

徐宇峰(1984-),男,湖北武汉人,硕士研究生,主要研究方向:

三维动画技术,游戏引擎。图 1 Window环境下不同三维应用程序访问图形

硬件的方式1324

本栏目责任编辑:

唐一东多媒体技术及其应用三维游戏的实现需要创建三维的地形和一些三

维实体,需要往这些三维实体上贴位图,也就是进行纹理映射。通过纹理映射,我们的三维精灵将不仅有其三维外形,而且有同真实世界的物体一模一样的表面色

彩。一个视频游戏基本上是一个连续的循环,它完成逻辑动作,并在屏幕上产生一个图像。视频游戏的构成如图2所示,描述如下:

(1)初始化:

游戏系统初始化、游戏图形和声音的装入等;

(2)进入游戏循环:

游戏动作和情节开始运行,直到用户退出游戏主循环;

(3)获得玩家输入信息:

获取输入信息并储存到缓存以备下一步人工智能和游戏逻辑使用;

(4)执行人工智能和游戏逻辑:

包括游戏代码的主体部分,执行人工智能、物理系统和常规的游戏逻辑,其结果用于产生下一帧屏幕图像;

(5)渲染下一幅图像:

将第4步的结果,在后备缓存区渲染,用来产生游戏的下一帧动画;

(6)同步显示:

使用定时器或等待函数,以30帧/秒的最佳帧速,进行游戏画面刷新;

(7)返回到游戏循环的入口并重新执行上述全部步骤;

(8)结束游戏循环:

释放所有的资源并刷新系统。图2视频游戏的构成 3.1用Direct3D方法调用动画模型[4]在游戏开发过程中,我们通常用一些三维建模软件将游戏开发过程

中所用的各种二维或三维模型用其它建模软件建好,再把它转换为Direct3D能够调用的格式,此时游戏的开发就是完成对各种模型的调用和控制。下面我们以用Direct3D方法调用3DMAX制作的动画模型为例,简要介绍一下Direct3D方法调用动画步骤。如图3所示。

(1)初始化D3D,主要工作就是创建D3D对象和D3D设备;

(2)从X文件读入模型。用3DMAX制作的三维动画模型文件并不能直接用

D3D来调用,使用之前必须要将之转化为合适的文件格式;

(3)设置世界坐标矩阵。设置世界坐标系就是确定物体在世界坐标系中的位

置,我们可以通过世界坐标变换来改变物体的位置和朝向;

(4)设置透视投影。透视投影是将一个三维场景投影为一种在二维显示器上

显示的形式,它通过定义视域角来确定视图的宽度和高度,通过确定物体与照相机的远近可确定物体的大小,通过确定近平面和远平面定义了可视物体的距离;

(5)设置观察矩阵。观察矩阵是用于描述观察者在场景中的位置和朝向;

(6)设置灯光。建立好照相机系统后,还必须在该系统中设置一定的灯光,才能使物体在显示器中显示出来。在D3D中,有三种类型灯光[8]:

平行光源、点光源、聚光源;

(7)渲染模型。渲染模型就是将从X文件中读入的模型表现出来,主要包括模型的材质、纹理和网格。图 3 Direct3D方法调用动画步骤 3.2游戏动画的显示模型在游戏动画的显示过程中,如果直接对显示内存修改数据(即操作主画面),渲染每个屏幕画面,会明显看到闪烁。在游戏动画中,防止闪烁的技术叫页面翻转。DirectX采用双缓冲或后备缓冲技术[6],进行页面翻转。多数计算机动画通过在画面外的缓冲区域上画每个动画的备用屏幕,然后将图像快速地切换到显示画面实现。这种先在缓冲区画出图像然后拷贝到显示画面的技术叫双缓冲显示模型,如图4所示。图4双缓冲显示模型1325多媒体技术及其应用本栏目责任编辑:

唐一东但在拷贝中有一个很长的时间延时,使你能看到两个画面的区别。DirectDraw接口的问世,从而改进了双缓冲显示模型,提出了另一种显示模型———后备缓冲显示模型。后备缓冲(backbufer)是指几何形状、色彩深度同主画面相

同的用在动画链中的画面,在创建主画面时同时创建。它一般在VRAM中,比双缓冲方案下的内存拷贝快得多,这种显示技术叫后备缓冲显示模型,如图5所示。图5后备缓冲显示模型利用后备缓冲模型进行游戏动画的核心就是创建一个几何形

状、色彩深度同主画面完全相同的缓冲画面,调用DirectDraw提供的页面交换函数Flip0,就可以将后备缓冲页面的画面显示在主缓冲页面上,从而完成了一次动画交换,非常使人迷惑的是,后备缓冲不会变成主画面,或者相反。

事实上,指向VRAM的指针是由硬件切换的,而且从DirectDraw和编程人员的观点来看,后备缓冲画面总是在屏幕以外,而主画面总是显示在屏幕上。如下图所示,后备缓冲模型的游戏动画的算法描述如下:

BEGIN(开始)创建DirectDraw接口对象等初始化Do直到玩家退出{清除后备缓冲。对后备缓冲屏幕渲染。用后备缓冲画面交换主画面。锁定刷屏速度(如

30fbs)。}销毁DirectDraw接口对象等END(结束)图6后备缓冲模型的游戏动画的算法3.3纹理映射技术[6]是近几年来发展最快的技术之一,广泛应用于三维真实感图形的生成与显中。

运用纹理映射可以方便地制作真实感图形而不花更多的时间去考虑物体的

表面细节,纹理映射的本质是对三维物体进行二维参数化,即先求得三维物体表面上任一点的二维(u,v)参数值,进而得到该点的纹理值,最终生成三维图形表面上的纹理图案。在光滑曲面上添加纹理图案的核心问题是映射,因此纹理问题可以简化为从一个坐标系到另一个坐标系的变换。其中至少涉及两个映射,一个是从纹理空间到景物空间,有时也称为曲面参数化;第二个映射是从景物空间到图像(屏幕)空间,即取景变换。通常,这两个变换被合成为一个变换。如果纹理图案定义在

纹理空间中一个正交坐标系(u,v)中,曲面定义在景物空间的正交坐标系(x,y,z)中,它在参数空间(θ,φ)的表示为x(θ,φ),y(θ,φ),z(θ,φ),那么在曲面上添加纹理将涉及在两

曲面之间确定或指定一个映射函数。例如:

从纹理空间到参数空间的映射为:

θ=f(u,v),φ=g(u,v).从参数空间到纹理空间的逆映射为:

u=r(θ,φ),v=s(θ,φ)3.4面缓存技术[7]指的是将纹理光照映射计算的结果保存起来,如在一个房间中,有10个纹理需要映射,如果玩家暂时不会离开房间,我们就可

以计算这些纹理的光照纹理映射版本,并将其保存到高速缓存中供下一帧使用,这样,当高速缓存有所需的光照映射纹理则无需重新计算,你不但不丢弃光照映射计算结果,还更新计算结果。面缓存技术工作原理如下:

初始化纹理高速缓存,删除其中所有的纹理Begin SceneFor(场景中的每个纹理T)If(面高速缓存中有纹理T)then使用它来渲染多边形elseBegin找到用于纹理T的光照图,使用它来调制纹理T,并将结果存储到高速缓存中如果高速缓存已满,删除最近用得最少的纹理End elseEnd Scene1326

相关主题
相关文档
最新文档