DirectX三维文字及地形场景实验-.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《DX三维文字及地形场景实验》 实验报告 实验目的 通过实验,运用DirectX三维图形编程的知识、原理和技术; 掌握在综合三维场景的基础上,设计一个三维文字及地形的实现方法; 通过使用VC++编程环境实现三维场景中的三维文字及地形的设计; 实验内容和要求 在VC++编程环境下建立三维场景,场景中包括: 茶壶模型、圆柱体模型。 茶壶模型使用黄色材质。 圆柱体模型使用纹理贴图材质。 设置一个电光源灯光系统。 在VC++编程环境下建立一个三维文字及地形的设计。 在三维场景中,使用地形文件建立一个三维地形。 同时输出三维文字,文字内容包括:学生名字、学号。 要求能够使用粒子系统实现烟火/雪花等特效。 实验主要仪器设备和材料 计算机,VC++2005语言程序设计环境 和DirectX 三维图形开发环境。 实验原理 D3DX库是使用ID3DXFont接口来在Direct3D应用程序中输出文字的。这个接口通过GDI(图形设备接口)来输出文字,因此用这个接口完成任务的时候会有些效率上的损失。但是,运用了GDI,ID3DXFont可以处理复杂的文字和文字格式。 在DirectX中通过D3DXCreateFontIndirect方法来创建一个ID3DXFont接口: HRESULT?WINAPI?D3DXCreateFontIndirect(? LPDIRECT3DDEVICE9?pDevice, // 当前所使用的设备 CONST D3DXFONT_DESC?*pDesc, // 字体描述结构 LPD3DXFONT?*ppFont // 返回的字体接口 ); 当获得了一个ID3DXFont接口以后,可以方便地利用ID3DXFont接口的DrawText方法来输出文字: INT ID3DXFont::DrawText( LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color ); 范例代码如下: Font-DrawText( Hello World, // 待输出字符串 -1, // NULL结尾(Null terminating)的字符串 rect, // 决定文字输出到屏幕的位置 DT_TOP | DT_LEFT, // 在指定RECT的左上角输出 0xff000000 // 文字颜色:黑色 ); 用具有不同高度、不同颜色的三角形网格来创建高山和低谷,以此模拟一个真实的地形。高度图是一个储存了地形各个顶点高度数据的数据集合。可以用硬盘上的图片来为地形加上纹理,也可以用程序生成地形纹理。通过计算每个方格的阴影因子来标识这个方格究竟会有多亮/多暗。阴影因素由光线向量与方格的法线向量之间的角度来计算。让摄像机在场景中移动时,需要寻找当前所处的三角形。然后,计算三角形上的两个向量,这两个向量尾部相接,且与三角形的两边重合。通过一个左上角在原点的单位化方位的x坐标与z坐标为参数,在这些向量上进行线性内插,从而求出高度值。 Terrain类提供下面两个方法来访问和修改高度图中的元素: int Terrain::getHeightmapEntry(int row, int col) { return _heightmap[row * _numVertsPerRow + col]; } void Terrain::setHeightmapEntry(int row, int col, int value) { _heightmap[row * _numVertsPerRow + col] = value; } Terrain类提供了两种方法来为地形加上纹理,较简单的方法是载入并使用一个先前做好的纹理图。Terrain类中实现了下面的方法,把图片文件中的纹理数据载入到IDirect3DTexture9对象中,并使用_tex指针指向它。Terrain::draw方法在渲染地形之前将会设置_tex的值。具体参见教材P216。 实验报告内容: 程序结果分析 源程序 #include d3dUtility.h #include terrain.h #include camera.h #include cube.h #include vertex.h #include pSystem.h #include cstdlib #include ctime // // Globals // IDirect3DDevice9* Device = 0; const int Width = 1000; const int Height = 700;

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档