.多媒体技术及其应用······ 本栏目责任编辑:唐一东
3D游戏引擎构架及游戏动画渲染技术
徐宇峰,刘秀珍,王革
(中国地质大学艺术与传媒学院.湖北武汉430074)
摘要:介绍了计算机游戏动画原理和实现
。从应用程序访问图形硬件方式、游戏引擎结构、视频游戏动画的原理、游戏动画的显
示模型、纹理映射等方面,对游戏动画作了一个全面的综述。重.最描述了追求高速度的游戏引擎在鳊程中对宏和内联
的使用.
提出了有待研究的游戏动画面缓存技术。
关键词:游戏引擎;DirectX;OpenGL;纹理映射:内联函教
中图分类号:TP37 文献标识码:A
3DGameEngineStructureandGameAnimationRenderingTechnology
XUYu—feng.LIUXiu—zhen,WANGGe
(ImtituteofArtsandCommunication,ChinaUniversityofGeosciences,Wuhan430074.C‰)
Abstract:Describesacomputergameanimationprincipleandmethod.FromappficationstOaccessgraphicshardware,铲meenginestruc-
ture,theprincipleofvideogameammation,gameanimationshowsmodel,texturemapping,madeacomprehemive州ewtothegamean-
imation.Thepursuithigh—speed籼enginemeoftheAcerandinlinefunctioninprogrammingageemphasize,Intheend,thecache
technology,whichisstillneededtObediscussed,isproposed.
Keywords:Gameengine;DirectX;OpenGL;Texturemapping;Inlinefunction
1引言
游戏引擎就是在对部分通用技术细节进行整理和封装的基础上,形成一个面向游戏应用的应用程序接口(API)111函数f称之为
“引擎”),使得游戏开发人员不必再关心底层技术的实现细节,大大减少开发人员的工作难度和工作量,缩短开发周期。引擎最大的
特点就是具有“驱动性”,即引擎仅仅在功能上支持某个方面的应用,但具体的实现细节则依赖于应用本身。其次。引擎具有。完整
性”的特点,即引擎是能完整实现某个方面功能的函数集。第三,引擎还具有“独立性”的特点,即引擎可以不依赖于具体的应用而独
立存在。游戏引擎一般包含渲染、编辑工具、物理学、人工智能、网络等等。而游戏场景模块是游戏渲染最核心的部分。场景模块作
为游戏引擎的核心部分,是游戏开发者们调用最多的一个模块。为了进一步提高游戏开发者们的效率、游戏引擎模块的高隐藏性和
游戏引擎的可拓展性.
一个好的游戏引擎显得至关重要。
2 Direct3D硬件访问方式
Direet31)Isl是Microsoft的DiroetX软件开发包的组件,它提供了对实时的、三维图形的支持,它的核心功能是提供一个与图形硬件
的接口,结束了图形应用程序的设备相关性,从这个意义上来讲,它与0penG删是同一类的概念,目前,它已经与OpenGL一起成为
了基于PC图形开发的两大工业标准,使计算机3D图形开发不再是极少数专业人员的专利,只要具备一定的图形学基础知识。就能
利用DirectXSDK和OpenGL开发出自己的图形应用程序。
通常的应用程序对硬件设备的访问是通过调用图形设备接口(GDI)田
来实现的。由于GDI的技术局限,使得应用程序不能高效地访问或操作硬
件资源,难以用来开发复杂的三维应用程序如三维游戏、OpenGL和Di。
rect3D,以提供了更专业的图形硬件访问接口,见图l。OpenGL的三维重建
功能主要通过直接访问DDI来实现。由于DDI的通用性降低了对图形硬
件的访问效率。Direet3D则提供了访问图形设备的立即模式,该模式通过
硬件抽象层(HAL)获得更高效率。HAL还允许图形硬件在渲染、光栅化等
方面保留自己独特的性能。从而获得更优化的显示效果。如右下图所示。
3游戏动画的构成原理及动画渲染技术
l Direct3D应用软件Ilop∞oL三鼍应用软件IlODl三-I应用软件l
● ● ●
l Direr3D胴ll OpenGLAPl l I软件樱报3DI
立■ 囊式慑_I曩式.I申
●
l GDI l
■
l HALDevice卜.IDeviceDrivernterface(DDIIJ
● ●
I GraphicHardware I
图l Window环境下不同三雏应用程序访问
图形硬件的方式
收稿日期:2008—01—10
作者简介:徐宇a4e(1984一),男,湖北武汉人,硕士研究生,主要研究方向:三雏动画技术,游戏引擎。
1324,劬电-知识与拄木 万方数据万方数据
本栏目责任编辑:唐一东 ······多媒体技术及其应用·
三维游戏的实现需要创建三维的地形和一些三维实体,需要往这些三维实体上贴位图,也就是进行纹理映射。通过纹理映射.
我们的三维精灵将不仅有其三维外形.而且有同真实世界的物体一模一样的表面色彩。一个视频游戏基本上是一个连续的循环.它
完成逻辑动作.并在屏幕上产生一个图像。视频游戏的构成如图2所示,描述如下:
(1)初始化:游戏系统初始化、游戏图形和声音的装入等;
(2)进人游戏循环:游戏动作和情节开始运行,直到用户退出游戏主循环;
(3)获得玩家输入信息:获取输入信息并储存到缓存以备下一步人工智能和游戏逻辑使用;
(4)执行人工智能和游戏逻辑:包括游戏代码的主体部分.执行人工智能、物理系统和常规的游戏逻辑,其结果用于产生下一帧
屏幕图像:
(5)渲染下一幅罔像:将第4步的结果.在后备缓存区渲染,用来产生游戏的下一帧动画;
(6)同步显示:使用定时器或等待函数,以30帧/秒的最佳帧速,进行游戏画面刷新;
(7)返回到游戏循环的人口并重新执行上述全部步骤;
(8)结束游戏循环:释放所有的资源并刷新系统。
获取玩采■入伯皇
精■
■拉内存
圜 将下一■两■童采翻后鲁量存
■盘●入‘
■戗杆■入
t一鬈●入
l!!
时向目廖
■定30■
焉汁雁
l■■
图2视频游戏的构成
3.1用DirecOD方法调用动画模型141
在游戏开发过程中,我们通常用一些三维建模软件将游戏开发过程中所用的各种二维或三维模型用其它建模软件建好,再把
它转换为Direct3D能够调用的格式,此时游戏的开发就是完成对各种模型的调用和控制。下面我们以用Direct3D方法调用
3DMAX制作的动画模型为例,简要介绍一下Direet3D方法调用动画步骤。如图3所示。
(1)初始化D3D,主要工作就是创建D3D对象和D3D设备;
(2)从X文件读入模型。用3DMAX制作的三维动画模型文件并不能直接用D3D来调用,使用之前必须要将之转化为合适的
文件格式:
(3)设置世界坐标矩阵。设置世界坐标系就是确定物体在世界坐标系中的位置.我们可以通过世界坐标变换来改变物体的位置
和朝向:
(4)设置透视投影。透视投影是将一个三维场景投影为一种在二维显示器上显示的形式,它通过定义视域角来确定视图的宽度
和高度,通过确定物体与照相机的远近可确定物体的大小。通过确定近平面和远平面定义了可视物体的距离;
(5)设置观察矩阵。观察矩阵是用于描述观察者在场景中的位置和朝向;
(6)设置灯光。建立好照相机系统后,还必须在该系统中设置一定的灯光,才能使物体在显示器中显示出来。在D3D中,有三种
类型灯光唑平行光源、点光源、聚光源;
(7)渲染模型。渲染模型就是将从X文件中读入的模型表现出来,主要包括模型的材质、纹理和网格。
图3 Direct3D方法调用动画步骤
3.2游戏动画的显示模型
在游戏动画的显示过程中。如果直接对显示内存修改数据(即操作主画面),渲染每个屏幕画面,会明显看到闪烁。在游戏动画
中.防止闪烁的技术叫页面翻转。DirectX采用双缓冲或后备缓冲技术161,进行页面翻转。多数计算机动画通过在画面外的缓冲区域上
画每个动画的备用屏幕,然后将图像快速地切换到显示画面实现。这种先在缓冲区画出图像然后拷贝到显示画面的技术叫双缓冲
显示模型。如图4所示。
下一■幡置翻以进行可曩化量示
图4双缓冲显示模型
1325
必L薹
万方数据万方数据
、弋.多媒体技术及其应用...... 本栏目责任编辑:唐一东
但在拷贝中有一个很长的时间延时,使你能看到两个画面的区别。DirectDraw接口的问世,从而改进了双缓冲显示模型,提出了
另一种显示模型——后备缓冲显示模型。后备缓冲(hackbufer)是指几何形状、色彩深度同主画面相同的用在动画链中的画面,在创
建主画面时同时创建。它一般在VRAM中。比双缓冲
下的内存拷贝快得多,这种显示技术叫后备缓冲显示模型,如图5所示。
门面森]
l!竺:!!!竺!I
图5后备缓冲显示模型
利用后备缓冲模型进行游戏动画的核心就是创建一个几何形状、色彩深度同主画面完全相同的缓冲画面,调用DirectDraw提
供的页面交换函数nip0,就可以将后备缓冲页面的画面显示在主缓冲页面上,从而完成了一次动画交换,非常使人迷惑的是,后备
缓冲不会变成主画面,或者相反。事实上,指向VRAM的指针是由硬件切换的。而且从DirectDraw和编程人员的观点来看。后备缓冲
画面总是在屏幕以外,而主画面总是显示在屏幕上。
如下图所示。后备缓冲模型的游戏动画的算法描述如下:
BEGIN(开始) 一‘
创建DirectDraw接口对象等初始化。
Do直到玩家退出
{清除后备缓冲。对后备缓冲屏幕渲染。用后备缓冲画面交换主画面。锁定刷屏速度(如30tbs)。l
销毁DirectDraw接1:1对象等
END(结束) ~ ,.”
图6后备缓冲模型的游戏动画的算法
3j纹理映射技术
纹理映射技术髑是近几年来发展最快的技术之一。广泛应用于三维真实感图形的生成与显中。运用纹理映射可以方便地制作真
实感图形而不花更多的时间去考虑物体的表面细节,纹理映射的本质是对三维物体进行二维参数化,即先求得三维物体表面上任一
点的二维(U,v)参数值,进而得到该点的纹理值,最终生成三维图形表面上的纹理图案。在光滑曲面上添加纹理图案的核心问题是映
射,因此纹理问题可以简化为从一个坐标系到另一个坐标系的变换。其中至少涉及两个映射,一个是从纹理空间到景物空间.有时也
称为曲面参数化;第二个映射是从景物空间到图像(屏幕)空间,即取景变换。通常,这两个变换被合成为一个变换。
如果纹理图案定义在纹理空间中一个正交坐标系(u,v)中,曲面定义在景物空间的正交坐标系(x,y,z)中,它在参数空间(0。‘P)的表
示为x(O,‘P)'y(0,‘P),z(0砷),那么在曲面上添加纹理将涉及在两曲面之间确定或指定一个映射函数。例如:
从纹理空间到参数空间的映射为:0嘶,V),9=g(u,v).
从参数空间到纹理空间的逆映射为:u=r(0,‘P),v--s(0,‘p)
3A面缓存技术
面缓存技术嘴的是将纹理光照映射计算的结果保存起来.如在一个房间中.有lO个纹理需要映射.如果玩家暂时不会离开房
问,我们就可以计算这些纹理的光照纹理映射版本,并将其保存到高速缓存中供下一帧使用,这样.当高速缓存有所需的光照映射
纹理则无需重新计算。你不但不丢弃光照映射计算结果,还更新计算结果。面缓存技术工作原理如下:初始化纹理高速缓存,删除其
中所有的纹理
BeginScene
Forf场景中的每个纹理D
Ⅱ(面高速缓存中有纹理田then使用它来渲染多边形
else
.
Begin
’’
找到用于纹理T的光照图,使用它来调制纹理T,并将结果存储到高速缓存中
如果高速缓存已满。删除最近用得最少的纹理
Endelse
EndScene
1326jl::7电-知识与擅来 万方数据万方数据
本栏目贾任编辑:唐一东 ..·...多媒体技术及其应用./
Repeat
这样根据光照图计算出调制后的纹理后,便可以实现漂亮的纹理和阴影,而不需要任何开销,实现这种技术是如此的简单而效
果又令人惊讶。
3.5宏和内联函数 .
编写数学引擎时,通过函数条用对数学对象执行操作时,函数调用花费的时间可能与实际数学运算花费的时间相当,因此,绝
对有必要使用宏和内联函数御。如图7所示。
图7与编译嚣和链接器相关的内联过程
编写游戏引擎时.所有函数都应该是内联的,例如,在内部循环中调用下述函数
voidmir,O
IUCHAR*video_buffer=(UCHAR。)malloc(SCREEN_WIDTH+SCREEN—HEIGHT);
fh(inty20;y
工程系,2005,26(4):940一.941.
【4】李云,徐从东,陈春.使用D3D技术实现动画与视频的融合[J】.微计算机息,,2007,(23):263..265.
【5】BruceEekel.C++编程思想【M】.机械工业出版社,2005.11.
【6】AndreLaMothe.3DWindows游戏编程大师技巧fMl.中国电力出版社,2003.12.
【7】AndreLaMothe.3D游戏编程大师技巧fMl.人民邮电出版社,2005.6.
【81IFmnkD.hma.Di陀ct)(9.03D游戏开发编程基础『M1.清华大学出版社,,2007A.
【9】DaveShreiner,Ma∞nWoodaekieNeider,TomDavis[M].机械工业出版社,2006.6.
(上接弟1319页)
4结论
.
在Web中实现民族文字古籍文献数字图片的存储及呈现技术对民族古籍文献数字化保护具有很大的保护价值和实用价值,而
且促进了民族文字古籍文献图像技术的向前发展和实际应用,这是民族古籍文献在现代计算机技术中的有效应用.同时扩大了网上
民族文化图片的信息量。由于本项目采用现代比较先进的开发软件、先进的文件上传组件以及比较高效的压缩算法。在一定程度上
提高了图片上传的速度和呈现的速度,但同时也带来一定程度上的负面效果,比如呈现时虽然很清晰。但清晰显示的同时,图片扫描
时的背面的阴影也显示出来了。这是由于在对图像去噪时选择的算法不是很好,还需进一步改进。
’
参考文献:
【l】孙鑫著javaWeb开发详解【M】.电子工业出版社,2006.
【2】赵强著.精通JSP编程【M】.电子工业出版社,2006.
【3】赵光等著.JSP+Oracle数据库组建动态网站经典实例.电子工业出版社..20(5.
【4】刘彬著.JSP数据库高级教程【M】.清华大学出版社。2006(3).
【5】霍尔,【美】布朗著,赵学良译.Servlet与J8p核心编程(第2版)【M】.清华大学出版社,2004.
【6】埃克尔(Ecket,B),著,陈昊鹏,等,译.Java编程思想(第三版)【M】.机械工业出版社,2005.
1328电脑知识与拄木
万方数据万方数据
3D游戏引擎构架及游戏动画渲染技术
作者: 徐宇峰, 刘秀珍, 王革, XU Yu-feng, LIU Xiu-zhen, WANG Ge
作者单位: 中国地质大学,艺术与传媒学院,湖北,武汉,430074
刊名: 电脑知识与技术
英文刊名: COMPUTER KNOWLEDGE AND TECHNOLOGY
年,卷(期): 2008,1(7)
参考文献(9条)
1.樊翠 游戏引擎中场景接口的设计与实现[期刊论文]-西安:西北工业大学软件与微电子学院 2006(18)
2.樊翠;王丽芳 基于D3D的三维游戏引擎的设计与实现[期刊论文]-西安:西北工业大学软件与微电子学院 2006(10)
3.王明福;齐治文 基于DirectX的游戏动画技术研究[期刊论文]-深圳:深圳职业技术学院计算机应用工程系
2005(4)
4.李云;徐从东;陈春 使用D3D技术实现动画与视频的融合[期刊论文]-微计算机信息 2007(23)
5.Bruce Eckel C++编程思想 2005
6.Andre LaMothe 3DWindows游戏编程大师技巧 2003
7.Andre LaMothe 3D游戏编程大师技巧 2005
8.Frank D.Luna DirectX 9.0 3D游戏开发编程基础 2007
9.Dave Shreiner;Mason Woo;Jackie Neider;Tom Davis 查看详情 2006
本文读者也读过(5条)
1. 惠志.李春富.刘心雄.HUI Zhi.LI Chun-fu.LIU Xin-xiong 一个基于3D游戏引擎的虚拟展示方案[期刊论文]-微
机发展2005,15(4)
2. 黄旭.巩秀钢 3D游戏加速技术回顾及发展现状[期刊论文]-科技信息(学术版)2007(22)
3. 夏旺盛.黄心渊.XIA Wang-sheng.HUANG Xin-yuan 3D游戏引擎构架概述[期刊论文]-现代计算机(专业版)
2003(6)
4. 葛洪央.董媛媛 3D游戏引擎浅论[期刊论文]-漯河职业技术学院学报2008,7(2)
5. 杨志成.秦川.YANG Zhi-cheng.QIN Chuan 基于DirectX的3D游戏引擎研究与实现[期刊论文]-电脑知识与技术
2008,4(36)
本文链接:http://d.g.wanfangdata.com.cn/Periodical_dnzsyjs-itrzyksb200807046.aspx