1. 设计目的。
1) 掌握directx sdk的安装和设置方法。
2) 了解directx系统架构,掌握使用direct3d编写程序的步骤和原理。
3) 学习使用direct3d编写三角形渲染程序。
2. 设计内容和步骤。
1) directx是一种应用程序接口(api),它可以让windows平台上的游戏或多**程序获得更高的执行效率。加强3d图形和声音效果,并提供给设计人员一个统一的硬件驱动标准,让游戏开发者不必为不同品牌的硬件编写不同的驱动程序,也降低了用户安装及设置硬件的复杂度。也就是说:
只要游戏是依照和使用directx来开发的,不管你使用的是什么显卡、声卡,都统统能玩。
2) directx由很多api组成,按照性质分类,可以分为四大部分:显示部分、声音部分、输入部分和网络部分。显示部分进行图形处理,分为directdraw和direct3d,前者负责2d图形加速。
后者主要负责3d效果的显示。声音部分中最主要的api是directsound,除了**声音和处理混音之外,还加强了3d音效,并提供了录音功能。输入部分directinput可以支持多种游戏输入设备,除了键盘和鼠标之外还可以连接手柄、游戏操纵杆和模拟器等,它可以充分发挥这些设备的全部功能。
网络部分directplay主要是为了具有网络功能的游戏而开发的,提供了多种连接方式,如tcp/ip、ipx、modem、串口等,让玩家可以用各种连网方式进行对战。
3) directx的安装和设置步骤:
1、 使用directx之前,必须先安装directx开发包,directx开发包可以从微软的官方**(免费**,安装分两部分进行,安装运行时库和安装sdk组件,直接运行directx安装程序就可以自动完成这两步。安装directx之后,需要对编程环境中的头文件和库文件进行设置,设置步骤如下:
2、 如果使用vc++6.0编程,则设置步骤如下:
a、 启动vc++6.0,打开所要设置的项目,选择“tools”→“options”命令打开options对话框,如图1所示。
b、 在options对话框中选择“directories”,对话框状态如图2所示。
c、 在“show directories for:”下拉列表中选择“include files”,然后单击下面的“文件夹图标”按钮,接着通过查找directx安装目录下的include子目录来设置头文件子目录,添加后的对话框如图3所示。
d、 在“show directories for:”下拉列表中选择“library files”再单击下面的“文件夹图标”按钮,接着通过查找directx安装目录下的lib文件夹设置库文件目录,添加后的对话框如图4所示。
e、 选择“project”菜单下的“settings”命令打开“project settings”如图5所示。
f、 选择“link”选项卡,在“object/library modules”一栏最后插入 注意不要将原来的内容删除。插入后的对话框如图6所示。
3、 如果使用的编程环境是visual studio .net 2003,设置步骤如下:
a、 打开visual studio .net界面,选择菜单命令“工具”→“选项”,打开“选项”对话框,如图7所示。
b、 在左侧窗格中选择“项目”下的“vc++目录”,对话框状态如图8所示。
c、 在“显示以下内容的目录”下拉列表框中选择“包含文件”,然后单击下面的文件夹图标,接着通过查找directx安装目录下的include子目录添加头文件目录,设置后的对话框如图9所示。
d、 在“显示以下内容的目录”下拉列表框中选择“库文件”,然后单击下面的文件夹图标,接着通过查找directx安装目录下的lib文件夹下的x86文件夹,添加库文件目录,设置后的对话框如图10
e、 这一步要设置支持directx运行的静态库,方法是:用visual studio .net打开程序项目(也可以新建一个程序项目),假设项目名称为pro1,选择菜单命令“项目”→“pro1属性”打开“pro1属性页”对话框,如图11
f、 在左侧窗格中选择“配置属性”→“链接器”→“输入”,对话框状态如图12
g、 在“附加依赖项”中添入 单击“确定”按钮,设置结束。
4) 以下介绍使用direct3d api编写“三角形渲染”程序的步骤:
a、 首先创建一个vc++ win32空项目,并在主函数winmain中创建一个窗口,同时创建窗体消息的处理函数。
b、 要在程序中使用directx3d api,应包含头文件和格式为:
include<>
#pragma warning(disable:4996)
#include<>
#pragma warning(default:4996)
c、 创建3个全局变量g_pd3d、g_pd3ddevice、g_pvb,它们的类型分别为lpdirect3d9、lpdirect3ddevice9和lpdirect3dvertexbuffer9。它们分别是指向direct3d对象的指针、指向d3ddevice(d3d设备)的指针和指向顶点缓冲区的指针。
d、 创建结构体类型customvertex表示顶点,该结构体中包含4个float型成员x、y、z、rhw,表示顶点的位置信息,一个dword类型的成员color,表示顶点的颜色。
e、 设计函数initd3d来初始化d3d,该函数的签名为hresult initd3d(hwnd hwnd),参数hwnd为窗体句柄。函数中先调用函数direct3dcreate9创建d3d对象,再调用函数createdevice创建d3d设备。函数**如下:
hresult initd3d(hwnd hwnd)
if(null==(g_pd3d=direct3dcreate9(d3d_sdk_version)))
return e_fail;
d3dpresent_parameters d3dpp;
zeromemory(&d3dpp,sizeof(d3dpp));
if(failed(g_pd3d->createdevice(d3dadapter_default, d3ddevtype_hal, hwnd,d3dcreate_software_vertexprocessing,&d3dpp,&g_pd3ddevice)))
return e_fail;
return s_ok;
f、 设计函数initvb用来设置和锁定三角形顶点。函数**如下:
hresult initvb()
customvertex vertices=
350.0f,50.0f,0.
5f,1.0f,0xffff0000,},450.0f,250.
0f,0.5f,1.0f,0xff00ff00,},50.
0f,250.0f,0.5f,1.
0f,0xff00ffff,},if(failed(g_pd3ddevice->createvertexbuffer(3*sizeof(customvertex),0,d3dfvf_customvertex,d3dpool_default,&g_pvb,null)))
return e_fail;
void* pvertices;
if(failed(g_pvb->lock(0,sizeof(vertices),(void**)pvertices,0)))
return e_fail;
memcpy(pvertices,vertices,sizeof(vertices));
g_pvb->unlock();
return s_ok;
createvertexbuffer函数的参数d3dfvf_customvertex为一个宏,可在函数前面进行如下宏定义:
#define d3dfvf_customvertex d3dfvf_xyzrhw|d3dfvf_diffuse
g、 设计函数 cleanup在程序结束时释放d3d对象和设备极其占用的内存。函数**如下:
void cleanup()
if(g_pvb!=null)
g_pvb->release();
if(g_pd3ddevice!=null)
g_pd3ddevice->release();
if(g_pd3d!=null)
g_pd3d->release();
h、 设计函数render来绘制和渲染场景。函数**如下:
void render()
g_pd3ddevice->clear(0,null,d3dclear_target,d3dcolor_xrgb(255,0,255),1.0f,0);
if(succeeded(g_pd3ddevice->beginscene())
课程设计题目
2011年工厂供配电技术课程设计题目。某大型铸造工厂配电一次系统设计。任务书 广东水利电力职业技术学院电力工程系。2011年6月广州。1.原始资料。1.1全厂用电设备情况 1 负荷大小。全厂用电设备总安装容量 6630kw 10kv侧计算负荷总容量 有功功率4921kw 无功功率1512kvar各车...
课程设计题目
课程设计ii题目。指导教师 叶晓国。1目的与总体要求。课程设计的目的是对学生专业课所学知识的进一步巩固和提高。本课程设计主要为了巩固 计算机网络 课程知识,使学生加深对课内所学的有关计算机网络体系结构 网络协议,网络安全,网络管理等知识的理解,通过实际开发小型的计算机网络工程项目,提高网络协议分析和...
课程设计题目
滨州学院2011 2012学年第二学期。电气工程与自动化专业 本 2009级 单片机原理与应用 课程设计。一 数字秒表设计。设计一个数字秒表,具有如下功能 当用户按下开始键后开始计时,计时范围00 99s,每秒加1,超过99秒自动清零 当用户按下停止键后停止计时,显示不变 当用户按下复位键后,显示0...