面向三维游戏应用阴影实时绘制方法.docVIP

面向三维游戏应用阴影实时绘制方法.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向三维游戏应用阴影实时绘制方法

面向三维游戏应用阴影实时绘制方法   摘要:为了实现真实感的三维游戏场景中阴影特效,主要研究基于阴影体的阴影实时绘制方法。分析阴影绘制方法相关工作,详细阐述基于阴影体的阴影实时绘制的算法,给出实验数据及其分析。实验证明,本方法是行之有效的。该方法已经成功应用于实验室开发的实际三维游戏应用项目中。   关键词:阴影特效;阴影体;实时绘制;深度模板值   0 引言   阴影效果是添加光源的真实感三维场景必不可少的特效。阴影实时绘制技术是当前虚拟现实、数字娱乐等领域研究的热点之一。当然,阴影的实时计算过程是较复杂的,因此,阴影效果实时绘制技术也是当前虚拟现实、数字娱乐等领域研究的难点之一。   为了实现真实感的三维游戏场景中阴影特效,本文主要研究阴影的实时绘制方法。首先:   1 相关工作   阴影体绘制方法,是一种纯几何信息的计算方法。1977年,Franklin C.首次提出该方法。该方法的基本原理是,根据光源和遮蔽物间的位置关系,计算出场景中会产生阴影的区域,然后对所有物体进行检测,以确定其会不会受阴影的影响。由于受当时硬件的限制,该算法并没有真正实现。   随着计算机硬件的不断快速发展。众多研究者已经对阴影体方法进行了研究。Diefenbach和Morgan分别对阴影体方法进行了改进。2004年,John Carmack在著名三维游戏DOOM3中首次应用了真实感的阴影实时绘制方法。真实感较强的场景,深深地吸引了众多玩家的眼球。尽管DX9的Shader功能越发强大,但是DOOM3中仍然采用的是基于CPU的阴影实时绘制方法,而且效率良好。   为了实现真实感的三维游戏场景中阴影特效,本文主要研究基于阴影体的阴影实时绘制方法,并把该方法应用于实际项目中。   2 基于阴影体的阴影实时绘制方法   基于阴影体的阴影实时绘制方法。首先,初始化场景,包括设定场景绘制环境、装载场景中各种物体模型数据及设定场景中的光源属性;然后,沿着光源方向,检测物体模型轮廓边;其次,构建阴影体;接着,计算深度模板值;根据深度模板值确定阴影区域;最后,绘制阴影。具体流程如图1所示。   2.1初始化场景   初始化场???阶段,一般需要设定系统绘制环境、装载场景中各种物体模型数据及设定场景中的光源属性。设定系统绘制环境,包括系统绘制窗口尺寸、场景背景颜色、初始化颜色缓冲区、深度缓冲区等。装载场景模型数据,包括场景中的各种物体,例如各种建筑物、植物、怪兽等的模型。设定场景中的光源属性,包括光源位置、光源方向、光源颜色等的属性。   2.2检测模型轮廓边   为了快速检测物体模型沿光源方向的轮廓边,本方法根据模型表面三角形法向量与光源方向的点积来计算轮廓边数据。当然,场景中可能会有多个物体模型。此时,针对这些物体模型,都需要计算轮廓边。   检测模型轮廓线具体方法与步骤如下:   ①计算模型表面三角形法向量;   ②计算模型表面三角形法向量与光源方向的点积:   ③确定三角形是否面向光源(如果DOT=0,则该三角形面向光源;否则,该三角形背向光源);   ④初始化用于存轮廓边的栈;   ⑤依次检测面向光源的三角形的三条边是否在栈中。若不在,则入栈;   ⑥依次连接栈中存储的边,确定沿光源方向的物体模型轮廓边。   2.3构建阴影体   为了快速确定阴影区域,需要计算并确定阴影体。从光源出发。依次连接光源与模型轮廓边上的顶点。光源与模型轮廓上的一条边确定一个平面。光源与多条模型轮廓边确定了多个平面,这些平面相交并包裹的部分,即是阴影体。此时,该阴影体是开口的阴影体。后续计算时。与视锥体的6个面相交,得出封闭的阴影体。当然,该阴影体只是辅助阴影计算,并不是在场景中真正绘制出来。当场景中有多个物体模型时,此时需要针对每个物体构建相应的阴影体。   2.4计算深度模板值   为了判定阴影区域,需要根据深度模板值来确定。利用模板测试和深度测试,以视点位置为出发点,对视窗内的每个像素。依次与每个阴影体的前向面(即面向视点的一面)和背向面(即背向视点的一面),完成两遍深度测试,计算深度模板值。具体步骤如下:   ①初始化深度缓冲区;   ②打开深度缓冲写和深度缓冲区测试;   ③关闭光源,以视点位置为出发点,渲染整个场景,得到整个场景的所有物体的深度图;   ④关闭深度缓冲写;   ⑤打开模板测试和深度测试,允许模板缓存写;   ⑥以视点位置为出发点,针对每个阴影体的前向面,完成第一遍深度测试。若深度测试成功,则对应的模板值就加1,否则,对应的模板值不变;   ⑦以视点位置为出发点,针对每个阴影体的背向面,完成第二遍深度测试。若深度测试成功,则对应的模板值就减1,否则,对应的模板值不变;   ⑧关闭模板测试和深度测试。   深度模板值是基于当前视点位置运算的结果。因此。

文档评论(0)

189****7685 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档