- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于DirectX三维地形绘制及三维拾取方法研究
基于DirectX三维地形绘制及三维拾取方法研究
摘 要:随着图形处理技术及显卡处理能力等的日益成熟,三维游戏已经成为游戏市场的主导。主要介绍基于Microsoft的一套功能丰富的底层API--DirectX的最基本的三维地形绘制过程以及三维世界中拾取的研究,为游戏学习者提供一种易于理解的方式来进行3D技术中难点的学习。
关键词:游戏 三维地形 三维拾取
中图分类号:TP391.9 文献标识码:A 文章编号:1007-3973(2013)006-101-02
1 引言
随着游戏玩家经验的积累和科技体验、审美能力的提高,传统的二维世界游戏已经无法满足人们享受娱乐的需求,游戏为了适应市场的需要,必须变革。从Directx1.0~Directx10的发展史可以窥见游戏世界的进化历程:从最初Directx1.0仅能够做的直接读取硬件信息,开发的游戏能实现对二维图像进行加速,Directx2.0中D3D部分的雏形到Directx7.0支持TL技术,使得CPU从繁重的位置、???光等计算中解放出来,使得没有高速的CPU也同样能流畅的跑起3D游戏直至Directx10统一了渲染架构,使得GPU更加高效,3D世界进一步拟真化。DirectX作为当今游戏底层API的引导者这一格局,也明示了3D游戏才是市场发展的趋势这一事实。因此,游戏学习者必须对3D游戏有所涉及。了解三维游戏场景中最基本的地形绘制,有利于学习者对三维游戏有直观的认识。拾取算法的研究,有助于游戏学习者对3D游戏的深入了解。
2 三维地形绘制
游戏场景通常会架设在起伏的山坡,绿地,沙滩,雪地,树林等自然环境中,这样的场景可增加游戏的逼真度和吸引力。友好精美的游戏场景无疑会使得游戏在竞争激烈的市场中获得第一眼优势。
2.1 地形高度图的创建、访问和修改
通过地理学习可知,一般用灰度图来表示地理位置上的海拔,颜色越深的就表示海拔越高,灰度图是高度图的一种表示类型。因此,进行三维地形绘制,我们使用一种最简单的方法,通过使用图形处理应用程序Photoshop来进行高度图(指定灰度图类型)的绘制,通过颜色的设置来表示你想要的地形起伏。高度图绘制完成之后,将文件保存为8位raw文件,因为raw文件连续存储了图像中以字节为单位的每个像素的灰度值,因此,高度只能在【0,255】区间内变化,对于普通地形,这个值足够平滑,若这个区间不足以表达我们要的地形,可以在高度图数据加载到程序中时对其进行一个比例变化,重新分配一个精度更高的类型来存储高度值。
使用地形类(Terrain)中定义的readRawFile成员函数对高度图文件进行读取。使用类中提供的两个函数getHeightEntry 和setHeightEntry函数对高度图中的值进行访问和修改。
2.2 创建地形的几何信息以及为每个顶点建立索引
一般灰度图创建时灰度图形与将要创建的地形的尺寸是相同的。高度图绘制完毕,就开始创建地形的几何图形,即对高度图中的每个值创建对应的顶点。Terrian类中通过其构造函数来完成创建过程。将要创建的几何地形图的基本信息通过构造函数的参数列表传递,参数包括已创建的raw文件字符串文件名,每行、每列的顶点数以及每个单元间距以及比例变化值,通过这些参数,还可以计算出地形的其他变量,如每行的单元数,每列单元数,地形几何图形的宽度和高度,总的顶点数以及其中三角形面片数目等。创建好地形的几何图形之后,就需要计算几何地形中的各个顶点具体的坐标值。可以假设已创建的地形几何图为一个方格棋盘,左上角的第一个顶点作为start,即第一个点,然后每隔每个单元间距,根据输入的每行每列的顶点数逐行生成顶点,一直到达右下角的end即最后一个顶点为止。Terrian类使用的computerVertices成员函数就是根据上述过程进行计算,通过计算就可以获得每个顶点的x和z坐标的定义,而每个顶点的y坐标的值这要根据所加载的高度图数据结构中的相应项来获得。计算机要使用图形中的每一个顶点,就必须为其添加索引,因此,需要为创建的地形图的每一个顶点创建索引。为计算三角形栅格各顶点的索引,只需要从上述所说的start顶点至end,依次遍历每一个地形几何图中的方格,并计算构成每个方格的三角形面片的定点索引。对于一个第i行、第j列的方格中的两三角形面片的顶点,通过通用公式:
△ABC ={i*每行顶点数+j,i*每行顶点数+j+1,(i+1)*每行顶点数+j}
△CBD={(i+1)*每行顶点数+j,i*每行顶点数+j+1,(i+1)*每行顶点数+j+1}
即可求得每个顶点的索引值。Terrian类中的computerIndices成员函数就是基于这样的算法为几何地形中
文档评论(0)