directX游戏编程实验.docx

上传人:b****4 文档编号:5196622 上传时间:2022-12-13 格式:DOCX 页数:13 大小:964.82KB
下载 相关 举报
directX游戏编程实验.docx_第1页
第1页 / 共13页
directX游戏编程实验.docx_第2页
第2页 / 共13页
directX游戏编程实验.docx_第3页
第3页 / 共13页
directX游戏编程实验.docx_第4页
第4页 / 共13页
directX游戏编程实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

directX游戏编程实验.docx

《directX游戏编程实验.docx》由会员分享,可在线阅读,更多相关《directX游戏编程实验.docx(13页珍藏版)》请在冰豆网上搜索。

directX游戏编程实验.docx

directX游戏编程实验

directX游戏编程实验

*******

《DirectX角色游戏编程》

(2011-2012学年第2学期)

学号:

E********

*******

班级:

10数媒

(2)班

浙江理工大学信息学院

实验指导书

实验名称:

DirectX三维文字场及地形景实验学时安排:

3

实验类别:

综合设计型实验实验要求:

1人1组

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

一、实验目的

(1)通过实验,运用DirectX三维图形编程的知识、原理和技术;

(2)掌握在综合三维场景的基础上,设计一个三维文字及地形的实现方法;

(3)通过使用VC++编程环境实现三维场景中的三维文字及地形的设计。

二、实验仪器

计算机,VC++2005语言程序设计环境和DirectX三维图形开发环境

三、实验原理

D3DX库是使用ID3DXFont接口来在Direct3D应用程序中输出文字的。

这个接口通过GDI(图形设备接口)来输出文字,因此用这个接口完成任务的时候会有些效率上的损失。

但是,运用了GDI,ID3DXFont可以处理复杂的文字和文字格式。

在DirectX中通过D3DXCreateFontIndirect方法来创建一个ID3DXFont接口:

HRESULT WINAPI D3DXCreateFontIndirect( 

LPDIRECT3DDEVICE9 pDevice,//当前所使用的设备

CONSTD3DXFONT_DESC *pDesc,//字体描述结构

LPD3DXFONT *ppFont//返回的字体接口

);

当获得了一个ID3DXFont接口以后,可以方便地利用ID3DXFont接口的DrawText方法来输出文字:

INTID3DXFont:

:

DrawText(

LPCSTRpString,

INTCount,

LPRECTpRect,

DWORDFormat,

D3DCOLORColor

);

范例代码如下:

Font->DrawText(

"HelloWorld",//待输出字符串

-1,//NULL结尾(Nullterminating)的字符串

&rect,//决定文字输出到屏幕的位置

DT_TOP|DT_LEFT,//在指定RECT的左上角输出

0xff000000//文字颜色:

黑色

);

用具有不同高度、不同颜色的三角形网格来创建高山和低谷,以此模拟一个真实的地形。

高度图是一个储存了地形各个顶点高度数据的数据集合。

可以用硬盘上的图片来为地形加上纹理,也可以用程序生成地形纹理。

通过计算每个方格的阴影因子来标识这个方格究竟会有多亮/多暗。

阴影因素由光线向量与方格的法线向量之间的角度来计算。

让摄像机在场景中移动时,需要寻找当前所处的三角形。

然后,计算三角形上的两个向量,这两个向量尾部相接,且与三角形的两边重合。

通过一个左上角在原点的单位化方位的x坐标与z坐标为参数,在这些向量上进行线性内插,从而求出高度值。

Terrain类提供下面两个方法来访问和修改高度图中的元素:

intTerrain:

:

getHeightmapEntry(introw,intcol){

return_heightmap[row*_numVertsPerRow+col];

}

voidTerrain:

:

setHeightmapEntry(introw,intcol,intvalue){

_heightmap[row*_numVertsPerRow+col]=value;

}

Terrain类提供了两种方法来为地形加上纹理,较简单的方法是载入并使用一个先前做好的纹理图。

Terrain类中实现了下面的方法,把图片文件中的纹理数据载入到IDirect3DTexture9对象中,并使用_tex指针指向它。

Terrain:

:

draw方法在渲染地形之前将会设置_tex的值。

具体参见教材P216。

四、源程序、运行结果与测试分析

本程序在Cube程序上做修改(因为是旋转的立方体,所以截图时容易辨别是立方体):

在d3dUtility.h文件中加入:

在d3dUtility.cpp文件中加入:

首先给立方体创建纹理:

创建黄色材质的茶壶:

建立点光源:

最后释放内存:

实验结果:

制作好立方体与茶壶后添加到地形文件terrainDriver.cpp中,修改世界坐标使它们能浮现在地形上面

改变立方体旋转方式,使其绕y轴旋转,这里由于不会使物体绕其本身的的轴旋转,如果按照之前绕x和y轴旋转的话就是在做类似地球公转的运动,如下图:

实验结果:

在terrainDriver.cpp中添加文字:

定义两个文字接口:

,把定义的世界坐标Worlds改为有两个元素是数组

Worlds[0]表示茶壶的世界坐标,Worlds[1]表示文字Text的时间坐标,在boolsetup()里声明Worlds[1]的世界坐标位置:

在Display()函数中画出文字:

在Cleanup()中加入

实验结果:

定义雪花和烟花:

在setup()中建立雪花和烟花:

在Display()中画出雪花和烟花:

开始时把雪花画在了地形的前面出现了下面的结果,不知道出现了什么问题,后来才发现了。

实验结果:

五、心得体会

虽然这次实验做出了效果,也让我更深入地了解了DirectX关于世界坐标、纹理、例子系统及在画物体时的先后顺序,但还是存在很多的问题需要解决,在绘制立方体的纹理时,不是很难,其他代码书上也有例子可以参考,所以代码的问题不是很大,但在让这些出现在地形上碰到了很多问题,刚开始的时候不知道,做好时一直没有出现立方体和茶壶等,改变了它们的世界坐标位置后发现之前cube里立方体是绕x和y轴旋转的,改变位置后台还是这样的,想把它改成绕自己的轴旋转,但不会,也找不到这样的资料,未来有效果就只好改成绕y轴旋转;在做三维文字的时候,也不会修改其字体大小和朝向;制作雪花的时候,想改成自己想要的图片,但不知道为什么产生的效果就跟把雪花画在地形之前一样;由于时间关系也没有更深入的去了解地形。

通过这次实验,让我慢慢的喜欢上了编程,发现这个东西还蛮有趣的,虽然还不是很会做东西,但从不会一点点会起来,也让我自己有了成就感。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1