directX游戏编程实验二

合集下载

Directx9实验

Directx9实验

实验一实验题目:Directx的初始化实验目的:了解Win32程序基本框架及最简单的Directx 3D的程序框架。

实验步骤:(1)解压BookPart2Code.zip文件,打开Chapter1中的D3D9 Init目录下的d3dInit.cpp文件。

(2)从VC2008中为d3dInit.cpp新建一个项目,进行正确配置,解决编译和连接中的错误,并运行看结果。

(3)修改程序,使之运行在全屏幕方式,即无窗口模式。

(4)修改程序,使程序再回到窗口模式,并使得窗口的标题栏出现最小化(Minimize)、复原(Restore)和关闭(Close)图标,并使标题栏显示的字符串为你的姓名。

(5)修改程序,使得程序工作在软件模拟方式。

(6)修改程序改变窗口的分辨率和颜色格式。

(7)给窗口增加一个菜单(File下有一个Exit),并使之响应菜单上的Exit退出消息。

参考上课时讲的Dx9Ex1。

(8)修改程序,利用Clear()使之出现蓝色背景。

参考上课时讲的Directx SDX的第一个例子CreateDevice。

(9)修改程序,利用IDirect3DSurface9创建一个表面,并使它显示红色。

参考教案的46页,注意Back Buffer就是一个IDirect3DSurface9,要锁定Back Buffer,需要修改D3DPRESENT_PARAMETERS的Flags标志,参考MSDN。

实验二实验题目:坐标系、顶点、索引与网格实验目的:了解三维建模的三种方式:顶点、索引与网格;掌握三维到二维图形的的3个步骤:建模坐标系到世界坐标系的变换,照相机的位置、朝向和向上正方向的设置,三维世界投影到照相机的二维成像平面。

实验步骤:(1)打开Chapter3中的Triangle目录下的triangle.cpp文件,并为它建立一个工程文件。

修改源程序,增加建模坐标系到世界坐标系的变换,任意设置(x,y,z),运行观察结果;增加照相机的世界坐标系变换,改变其中的z坐标,运行观察结果。

Windows编程实验二实验报告

Windows编程实验二实验报告

Windows编程实验二实验报告一、实验目的本次 Windows 编程实验的目的在于深入了解和掌握 Windows 应用程序的开发流程,通过实际编程操作,提高对 Windows 消息机制、窗口处理、图形绘制等方面的理解和应用能力。

二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、窗口创建与消息处理创建一个基本的 Windows 窗口,并实现对窗口消息(如WM_CREATE、WM_PAINT、WM_DESTROY 等)的处理。

通过响应这些消息,完成窗口的初始化、绘制和关闭操作。

2、图形绘制在窗口客户区进行简单的图形绘制,如直线、矩形、圆形等。

掌握GDI(图形设备接口)的基本绘图函数和操作方法。

3、菜单与控件添加菜单到窗口,并处理菜单命令消息。

同时,尝试在窗口中添加一些基本的控件,如按钮、编辑框等,并实现相应的交互功能。

四、实验步骤1、创建项目打开 Visual Studio 2019,创建一个新的 Windows 桌面应用程序项目。

选择 C++作为编程语言,并按照向导进行设置,包括项目名称、存储位置等。

2、窗口类定义定义一个窗口类(WNDCLASS),设置窗口的样式、窗口过程函数指针等属性。

```cppWNDCLASS wndClass ={ 0 };wndClasslpfnWndProc = WndProc;wndClasshInstance = hInstance;wndClasslpszClassName = L"MainWindowClass";RegisterClass(&wndClass);```3、窗口创建与显示使用`CreateWindow` 函数创建窗口,并通过`ShowWindow` 和`UpdateWindow` 函数显示窗口。

```cppHWND hWnd = CreateWindow(L"MainWindowClass",L"Windows Programming Experiment",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL);ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);```4、消息循环在主函数中,通过一个无限循环来获取和分发窗口消息。

实验二 DirectX渲染及图形绘制实验

实验二 DirectX渲染及图形绘制实验

实验二DirectX渲染及图形绘制实验一、实验目的1、理解渲染管道的概念,知道利用几何方法描述三维场景的步骤以及怎样获得用于描述三维场景的二维图像。

2、理解Display函数的作用及参数的意义。

3、理解D3DXMatrixPerspectiveFovLH()函数的参数的意义。

4、了解Direct3D是如何存储顶点数据和索引数据的。

5、了解Setup函数的作用。

二、实验内容:项目1:DirectX渲染管道实验在例程Cube的基础上,完成以下步骤:1.修改Display函数中物体的旋转变换矩阵,使三维模型不再旋转。

2.修改摄像机位置坐标、观察点坐标、向上向量的值,记录以下状态时的值:a)远距离拍摄。

b)近距离拍摄。

c)平面旋转90度。

3.修改变换矩阵的创建参数,即D3DXMatrixPerspectiveFovLH()函数的参数,观察并记录以下参数对应的画面:a)近平面距离设为1000,远平面距离设为1000。

b)近平面距离设为1,远平面距离设为5。

c)近平面距离设为1,远平面距离设为1000。

d)宽高比:(float)width*1.5/(float)heighte)宽高比:(float)width*0.5/(float)heightf)宽高比:(float)width/(float)height项目2:DirectX图形绘制实验在例程Cube的基础上,完成以下步骤:1.修改8个顶点中任一个一个顶点的值,观察并记录画面。

2.增加一个顶点数据(第9个顶点),具体值为:(2.0f,1.0f,1.0f)。

观察并记录画面。

此处需要注意顶点缓冲区创建的缓冲区大小参数为9个顶点(Vertex)。

3.增加一个三角形数据,即三个索引缓冲区,具体值为:6,7,8。

观察并记录画面。

此处需要注意索引缓冲区创建的缓冲区大小参数为39个索引(WORD)。

4.再增加两个三角形数据,具体值为自行设定,观察并记录画面。

此处需要注意索引缓冲区创建的缓冲区大小参数为39+6个索引(WORD)。

directX游戏编程实验四吴凉凉-2012329700012

directX游戏编程实验四吴凉凉-2012329700012

浙江理工大学《DirectX 游戏编程》实验报告2013 ~2014学年第 1学期学 院班 级姓 名学 号 任课教师(上课时间:第10周345节)数字媒体技术专业20 14 年 5 月 15日Device->SetMaterial(&mtrl);黄色材质设定。

1、实现平行光照明。

D3DLIGHT9 dir;::ZeroMemory(&dir, sizeof(dir));dir.Type = D3DLIGHT_DIRECTIONAL;dir.Diffuse = d3d::WHITE;dir.Specular= d3d::WHITE * 0.3f;dir.Ambient= d3d::WHITE * 0.6f;dir.Direction= D3DXVECTOR3(1.0f, 0.0f, 0.0f);Device->SetLight(0, &dir);Device->LightEnable(0,true);Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);Device->SetRenderState(D3DRS_SPECULARENABLE,true);将语句:Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);注释后得3、增加一个蓝色点光源。

D3DXVECTOR3 pos(0.0f, 0.0f, 5.0f);D3DXCOLOR c = d3d::BLUE;D3DLIGHT9 point = d3d::InitPointLight(&pos, &c);Device->SetLight(1, &point);Device->LightEnable(1,true);4、实现材质设定的透明度,实现50%透明度。

DirectX实验二报告

DirectX实验二报告

实验二DirectX渲染及图形绘制实验实验报告项目1:DirectX渲染管道实验在例程Cub的基础上,完成以下步骤:1.修改Display函数中物体的旋转变换矩阵,使三维模型不再旋转。

2.修改摄像机位置坐标、观察点坐标、向上向量的值,记录以下状态时的值:a)远距离拍摄。

b)近距离拍摄。

c)平面旋转90度。

3.修改变换矩阵的创建参数,即D3DXMatrixPerspectiveFovLH()函数的参数,观察并记录以下参数对应的画面:a)近平面距离设为1000,远平面距离设为1000。

b)近平面距离设为1,远平面距离设为5。

c)近平面距离设为1,远平面距离设为1000。

d)宽高比:(float)width*1.5/(float)heighte)宽高比:(float)width*0.5/(float)heightf)宽高比:(float)width/(float)height1、修改Display函数中物体的旋转变换矩阵,使三维模型不再旋转。

操作截图如下:修改后的运行结果截图如下:2、修改摄像机位置坐标、观察点坐标、向上向量的值,记录以下状态时的值:a) 远距离拍摄。

操作代码:运行结果:b)近距离拍摄。

操作代码:运行结果:c) 平面旋转90度。

操作代码:运行结果:3、修改变换矩阵的创建参数,即D3DXMatrixPerspectiveFovLH()函数的参数,观察并记录以下参数对应的画面:(在第二步的基础上)a) 近平面距离设为1000,远平面距离设为1000。

操作代码:结果窗口画面一片空白。

b) 近平面距离设为1,远平面距离设为5。

操作代码:运行结果:c) 近平面距离设为1,远平面距离设为1000。

操作代码:结果与上图一样。

d) 宽高比:(float)width*1.5/(float)height操作代码:运行结果:e) 宽高比:(float)width*0.5/(float)height 操作代码:运行结果:g) 宽高比:(float)width/(float)height操作代码:运行结果:项目2:DirectX图形绘制实验在例程Cub的基础上,完成以下步骤:1.修改8个顶点中任一个一个顶点的值,观察并记录画面。

directX游戏编程实验

directX游戏编程实验

任课教师:张海翔《DirectX角色游戏编程》(2011-2012学年第2学期)实验报告学号:E10700206姓名:吴慧峰班级: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, // 当前所使用的设备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", // 待输出字符串。

directx实验三

directx实验三

浙江理工大学《DirectX游戏程序设计》实验三报告2013 ~2014 学年第2学期学院信息学院班级姓名学号任课教师(上课时间:第3周3-5节)数字媒体技术专业2014 年3 月《DirectX游戏程序设计》实验报告实验三DirectX彩色图形绘制实验二、实验代码:项目二A添加关于颜色的头文件:const D3DXCOLOR WHITE( D3DCOLOR_XRGB(255, 255, 255) );const D3DXCOLOR BLACK( D3DCOLOR_XRGB( 0, 0,0) );const D3DXCOLOR RED( D3DCOLOR_XRGB(255, 0,0) );const D3DXCOLOR GREEN( D3DCOLOR_XRGB( 0, 255,0) );const D3DXCOLOR BLUE( D3DCOLOR_XRGB( 0, 0,255) );const D3DXCOLOR YELLOW( D3DCOLOR_XRGB(255, 255,0) );const D3DXCOLOR CYAN( D3DCOLOR_XRGB( 0, 255,255) );const D3DXCOLOR MAGENTA( D3DCOLOR_XRGB(255, 0, 2)在colorvertex结构体中添加颜色参数D3DCOLOR cvertices[0] = ColorVertex(-1.0f, -1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[1] = ColorVertex(-1.0f, 1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[2] = ColorVertex( 1.0f, 1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[3] = ColorVertex( 1.0f, -1.0f,-1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[4] = ColorVertex(-1.0f, -1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[5] = ColorVertex(-1.0f, 1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[6] = ColorVertex( 1.0f, 1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));vertices[7] = ColorVertex( 1.0f, -1.0f,1.0f,D3DCOLOR_XRGB(255, 0, 0));C要求struct Vertex //顶点数据结构的定义{Vertex(){} //顶点数据包括XYZ坐标值还有顶点颜色值Vertex(float x, float y, float z, D3DCOLOR c){_x = x; _y = y; _z = z; _color = c;}float _x, _y, _z;D3DCOLOR _color;static const DWORD FVF;};Device->CreateVertexBuffer( //建立顶点缓冲区8 * sizeof(Vertex),D3DUSAGE_WRITEONLY,Vertex::FVF,D3DPOOL_MANAGED,&VB,0);Device->CreateIndexBuffer( //建立索引缓冲区36 * sizeof(WORD),D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_MANAGED,&IB,0);Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);//将渲染模式改为差值模式四、实验结果测试、收获与体会:结果截图项目一1项目二收货与感受源代码修改太多次,把主要的几个放在代码区,实验结果放在效果图上。

Directx3D编写2d画面程序

Directx3D编写2d画面程序
device->SetTransform( D3DTS_VIEW,&identity );
if( trans )
{
sprite->Begin( D3DXSPRITE_ALPHABLEND );
}
else
{
sprite->Begin( 0 );
}
//把纹理中的子区域画在指定的屏幕 Nhomakorabea标上 方法四:
就是在3D空间中与相机方向垂直的指定平面上画图,因些就要有两个函数一个是获取相机的原点到屏幕上一点的射线,另一个就是射线与平面的交点,
有了这个交点就可以在3D空间中画四边型了,从而显示出2D图像,
而关键是第一个函数,射线与平面的交点可用数学知识直接求出
下面的函数为计算出鼠标点击窗口的客户区后所产生的相机原点与该点相连的射线
c0.a = alpha;
c1.a = alpha;
c2.a = alpha;
c3.a = alpha;
}
v[0] = VERTEX_T( x,-y,0,c0 );
v[1] = VERTEX_T( x + w,-y,0,c1 );
v[2] = VERTEX_T( x,-( y + h ),0,c2 );
}
D3DXVECTOR3 v;
D3DCOLOR c;
static const DWORD FVF;
};
const DWORD VERTEX_T::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
void DrawRect_2D(
int x,
int y,

directX综合实验

directX综合实验

DirectX角色游戏编程实验指导书信息电子学院实验教学中心学号:E09700227姓名:曾焕凯班级:09数字媒体技术2班实验名称:DirectX三维文字及地形场景实验实验目的通过实验,运用DirectX三维图形编程的知识、原理和技术;掌握在综合三维场景的基础上,设计一个三维文字及地形的实现方法;通过使用VC++编程环境实现三维场景中的三维文字及地形的设计;算法实现的设计方法及程序流程图(一)在VC++编程环境下建立三维场景,场景中包括:茶壶模型体模型。

茶壶模型使用黄色材质。

圆柱体模型使用纹理贴图材质。

设置一个电光源灯光系统。

流程:代码主要在原有代码基础上修改得到,先将需要的头文件包含进来#include "cube.h" #include "vertex.h"之后对照两个例子的代码,将两个代码结合到一起即可。

具体见下面的代码。

(二)在VC++编程环境下建立一个三维文字及地形的设计。

1.在三维场景中,使用地形文件建立一个三维地形。

2.同时输出三维文字,文字内容包括:学生名字、学号。

流程:代码主要参考十三章以及第九章代码,将两者融合(主要在terrainDriver.cpp这个文件中进行修改)。

期间注意:HDC hdc = CreateCompatibleDC( 0 );HFONT hFont;HFONT hFontOld;这段代码从d3dxcreatetext.cpp 中引入到terrainDriver.cpp时会导致程序报错,经测试主要是因为在之前源文件夹中的d3dfont.cpp中已经定义过了。

解决方案是:去掉原来程序左上角的fps显示,以解决冲突。

具体方法:删除工程中d3dfont.cpp,d3dfont.h,以及其他无用的文件fps.h,fps.cpp.再在d3dxcreatetext.cpp中删除有关fps显示的响应语句:#include"fps.h" FPSCounter* FPS = 0; d3d::Delete<FPSCounter*>(FPS); FPS = new FPSCounter(Device);if( FPS )FPS->render(0xffffffff, timeDelta); 等语句。

DirectX 5.0游戏编程指南之DirectDraw篇

DirectX 5.0游戏编程指南之DirectDraw篇
DirectX 是为 Visual C++的用户准备的, 因此要编制 DirectDraw 游戏程序, 最好对 VC++ 要有一定的了解。不愿意使用 VC 的用户也可以利用 Arakelian Soft 公司开发的专门针对 Visual Basic5.0 用户的 ActiveX 控件 Direc tStudio98 或 Tegosoft 公司的 TegoSoft ActiveX for Visual Basic。不过,如果想充分发挥 DirectX 的性能,并且希望保持程序的兼容,那么最好 还是使用 Visual C++。 为了叙述方便,假定已经安装了 DirectX5.0 SDK 和 Visual C++ 5.0。 其目录分别是 C:\DX5SDK 和 C:\ProgramFiles\DevStudio。如果你使用了另一种编译器 或安装到了其它目录下,必须将下面的例子做适当的修改才能运行。有人安装了 DirectX SDK 后却不知怎样使用,因为它是基于 Visual C++的,却没有一个界面友好的集成开发环 境,因此必须对 Visual C++进行适当的配制。 1、配置 DirectX SDK 、 1.1 配置 Microsoft Developer Studio 为了编译 DirectX SDK 提供的例子,需要打开一个新的 Project Workspace,插入适当的 文件, 设置环境变量使得编译器能够找到需要的链接库和包含文件, 下面描述了设置的全部 过程。 启动 Microsoft Developer Studio,安装下述步骤创建工程 · 在 File 菜单,选择 New · 在 New 对话框中选择 Project 中的 Win32 Application · 在 Project Name 输入 DDEX1 · 在 Location 文本框输入放置工程文件的位置,点 OK 按钮 · 一个新的 DDEX1 Classes 文件夹就出现在 workspace 窗口的左边了 创建了工程后,需要使用如下步骤向工程插入适当的文件 · 在 Project 菜单选择 Add to Project | Files · 浏览到 C:\DX5SDK\SDK\SAMPLES\DDEX1 目录,选择所有的文件 · 选择 OK,该目录下的 DDEX1.CPP、DDEX1.RC、RESOURCE.H 就加入到工程了 然后设置包含文件的路径 · 在 Tools 菜单,选择 Options,就弹出 Options 对话框 · 选择 Directories,在 Show Directories For 列表框选择 Include files · 在 Directories 列表框双击列表底部的空白行,输入 C:\DX5SDK\SDK\INC

VB 三维图像 3D 游戏编程 DirectX 学习笔记

VB 三维图像 3D 游戏编程 DirectX 学习笔记

VB 三维图像 3D 游戏编程 DirectX 学习笔记 1DirectX 简介DirectX 是由微软公司创建的多媒体编程接口,可以轻松的在屏幕上绘制三维图形、播放音乐与声音效果,是在 VB 中进行三维游戏制作的得力工具。

目前 DirectX 版本已发展到 DirectX9.0。

在 VB6 中可使用的最高版本为DirectX8。

在 VB6 中要使用 DirectX,需在工程引用对话框中勾选 DirectX 8 for Visual Basic Type Library,对象浏览器显示的库名为:DxVBLibA。

★3D 坐标系统3-D图形应用程序使用两种类型的笛卡尔坐标系统:即左手坐标系统(left-handed)和右手坐标系统(right-handed)。

在这两种坐标系统中,x-轴正方向均指向右边,y-轴正方向也都指向上方。

z-轴的方向可以用左、右手定则来确定,即握起左(或右)手的四指来代表由x-方向旋转到y-方向,则左(或右)手的拇指就指向z-轴的正方向。

如下图:对三维坐标系统中定义的对象,基本的操作包括:平移(translate),旋转(rotate)和缩放(scale)。

也可以将这些基本变换组合起来建立一个变化矩阵。

★3D 图元一个3-D图元就是一些顶点的集合,它们组成了一个三维实体。

Direct3D 中最重要的不是点、不是线,也不是平面,而是三角形。

Direct3D用三角形来组成多边形和三维物体。

使用了材质之后,这个球体的表面看起来会更平滑。

如果再使用Gouraud明暗处理方法,它会更加逼真。

★矩阵与变换Direct3D中使用矩阵(matrices)来定义世界(world), 视(view)和投影变换(projection transformation)。

矩阵由 D3DMATRIX 结构来定义,是一个4×4 的二维数组。

常用的变换包括:平移(translation),旋转(rotation)和缩放(scaling)。

用DirectX进行游戏程序设计

用DirectX进行游戏程序设计

用DirectX进行游戏程序设计1.第1章:DirectX简介1.1说明虽然这篇文章中的例子用Visal C/C++ MFC开发的,但是我们要注意到, MFC掩藏了许多更好的内容。

1.2什么是DirectX?DirectX是MicroSoft提出的解决游戏开发者如何在Win95之下开发最佳游戏的问题解决方案。

游戏通常需要计算机的强大绘图能力,这时候Windows95成了个障碍。

DirectX是在游戏程序设计方面提供大量功能的API(应用程序编程接口),当然在其它方面也很有用。

DirectX主要由五个部分组成,如下所示:1.2.1.DirectX组件●DirectDraw 2维图形处理能力,表面,双缓冲,等等●Direct3D 是相对扩展功能的3D图形程序设计API。

●DirectSound 声音;3D声音●DirectPlay 简化网络游戏的开发●DirectInput 处理各种外围设备输入1.3.DirectX性能和硬件加速尽管Direct3D的软件性能并不差,但是DirectX是为硬件加速设计的。

这意味着图形卡商能制造出以硬件支持DirectDraw和Direct3D的图形卡,并提供有关图形卡的驱动程序。

这将使图形卡执行绘图功能而CPU被解放了出来做其它的事情。

典型的Direct3D加速器需要至少2或4兆或者更多的显存来储存位图(计算机图形由象素组成)、纹理、精灵、覆盖图(overlay)和其它东西。

DirectDraw和Direct3D在硬件上建立了一个相对容易访问的层叫作“硬件抽象层”(HAL)。

假如有一个图形卡不提供以上功能。

一个相应的软件执行程序将提供“硬件仿真层”(HEL)。

2.第2章:调色板,编写游戏的概念,双缓冲等2.1显示模式屏幕模式是指用多少位储存屏幕上每像素颜色。

自然地,被用于每一个象素的位越多,同时显示的颜色就越多;但是也就有更多数据移入显存用来更新屏幕。

●1,2,4和8位“索引”方式(8位这种称呼更流行,比256色模式更为人所知)●16-位(64K色)高彩色模式●24-位(16.7M色)真彩色模式●32-位RGBA方式。

游戏编程之十五DirectDraw的基本知识

游戏编程之十五DirectDraw的基本知识

游戏编程之⼗五DirectDraw的基本知识DirectDraw 游戏编程基础(2)游戏使计算机的发展超越了晶体管时代例程1(DDEX1):DirectDraw 的基本知识在使⽤ DirextDraw时,需要⾸先创建⼀个对象DirectDraw 的实体,该对象实体代表了微机显⽰适配器。

然后,使⽤接⼝所提供的⽅法来操作该对象实体,使之完成有关命令和任务。

接着,你还需要创建⼀个或多个 DirectDraw-surface对象的实体,以便能在图形表⾯(Surface)上展⽰你的游戏画⾯。

下⾯,在例程 DDEX1 中展⽰如何使⽤Directx 3 SDK来 DirectDraw对象实体,如何创建⼀个带有后台缓冲区的基本表⾯(Surface),以及如何弹出表⾯(Surface)。

注意:所有的例程都是⽤C++写成的,如果你的编辑器是C,你需要在⽂件中作出某些改动(⾄少,你要加⼊ Vtable 和指向各种接⼝⽅法的this 指针)。

DirectDraw 初始化:DirectDraw 初始化代码写在例程 DDEX1 的 doInit 函数中。

/** Create the main DirectDraw object.*/ddrval = DirectDrawCreate(NULL,&lpDD,NULL);if(ddrval==DD_OK){//Get exclusive mode.Ddrval=lpdd->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);if(ddrval==DD_OK){//Create the primary surface with 1 back buffer.Ddsd.dwSize = sizeof(ddsd);ddsd.dwFlags = DDSD_CAPS \ DSD_BACKBUFFERCOUNT;ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |DDSCAPS_FLIP |DDSCAPS_COMPLEX;ddsd.dwBackBufferCount = 1;ddrval = lpDD->CreateSurfae(&ddsd, &lpDDSPrimary,NULL);if(ddrval == DD_OK){//Cet a pointer to the back buffer.Ddscaps.dwCaps = DDSCAPS_BACKBUFFER;ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);if( ddrval == DD_OK){ // Draw some text.If(lpDDSPrimary->GetDC(&hdc) == DD_OK){SetBkColor(hdc, RGB(0,0,255));SetTextColor( hdc,RGB(255,255,0 ) );TextOut( hdc, 0, 0, sxFrontMsg, lstrlen(szFrontMsg ));lpDDSPrimary->ReleaseDC(hdc);}if(lpDDSBack->GetDC(&hdc) == DD_OK){SetBkColor( hdc, RGB(0, 0, 255 ) );SetTextColor( hdc, RGB( 255,255, 0 ) ):TexOut( hdc, 0, 0, szBackMsg, lstrlen( szBackMsg ) );lpDDSBack->ReleaseDC(hdc);If(SetTimer( hwnd, TIMER_ID, TIMER_RATE, NULL)){return TRUE;}}}}}}wsprintf(buf,"Direct Draw Init Failed (%08lx)\n",ddrval);...以下针对初始化 DirectDraw 对象和准备表⾯(Surface)集的各个步骤分别进⾏讨论:创建⼀个 DirectDraw 对象为了创建⼀个 DirecDraw 对象实体,你应该在程序中使⽤DirectDrawCreate API 函数(注意:这⾥我所说的是应该,⽽不是必须),这是因为使⽤ OLE 中的 CoCreatelnstance 函数也能创建⼀个 DirectDraw 对象实体,但这不在我们的讨论范围之中)。

DirectX游戏编程基础教程课程设计

DirectX游戏编程基础教程课程设计

DirectX游戏编程基础教程课程设计一、课程设计目的本课程设计旨在让学生了解游戏开发中使用的DirectX技术,从而掌握Windows平台下游戏编程开发的基础知识和技能。

同时,通过课程设计,学生可通过编写小型游戏项目,来巩固所学的知识和技能。

二、课程设计基础1、前置知识•熟练掌握C++语言•对Windows操作系统有基本的了解和操作经验2、课程内容•DirectX架构和运行方式•2D游戏开发的基础技术•3D游戏开发的基础技术•游戏中的动画技术•声音和音效的处理•核心游戏编程理论和算法•小型游戏项目的实际编写三、课程设计教学计划课时教学内容课时教学内容1 DirectX简介,DirectX的环境配置2 初识DirectX9,DirectX的基本架构,DirectX应用程序的开发流程3-4 Direct3D基础,Direct3D的初始化,顶点和索引缓冲,纹理映射5-6 2D图形绘制,2D精灵纹理,文字和字体,2D基础动画7-8 DirectInput输入,键盘和鼠标控制,DirectSound声音的播放9-10 Direct3D进阶,3D基础,3D物体绘制和变换,光照和材质游戏中的动画原理与实现,骨骼动画11-12高质量音乐和声效的处理,音效的设计13-1415-游戏编程中的算法和技巧,包括碰撞检测、物理模拟等16游戏项目实战,小型游戏制作17-18四、课程设计实践部分1、实践环境•操作系统:Windows 7及以上版本•开发软件:Visual Studio 2012及以上版本•开发库:DirectX 92、实践要求•完成一个小型游戏项目的设计和编写,包括基础的物理特性、3D模型的展示和动画、声音效果等。

•掌握游戏编程中的基本算法和技巧,包括碰撞检测、物理模拟等。

•熟练掌握DirectX在游戏编程中的运用,能熟练开发2D或3D游戏。

五、成果展示学生将通过课程设计和实践,掌握基础的DirectX游戏编程技术和算法知识,并能应用于实际的小型游戏项目中。

directX游戏编程实验五吴凉凉 2012329700012

directX游戏编程实验五吴凉凉 2012329700012
实验名称:
DirectX 三维文字场
实验地点:机 1
及地形景实验
一、 实验平台 Windows XP professional操作系统。 VC6.0集成开发环境
二、实验内容及结果
(1)在 VC++编程环境下建立三维场景,场景中包括: 1. 茶壶模型、圆柱体模型。 2. 茶壶模型使用黄色材质。 3. 圆柱体模型使用纹理贴图材质。 4. 设置一个电光源灯光系统。 (2)在 VC++编程环境下建立一个三维文字及地形的设计。 1. 在三维场景中,使用地形文件建立一个三维地形。 2. 同时输出三维文字,文字内容包括:学生名字、学号。
要求能够用粒子系统实现烟火/雪花等特效。 1、添加三维地形: 2、声明:
Terrain* TheTerrain = 0; psys::PSystem* Exp = 0; 创造三维地形: // // Create the terrain. // D3DXVECTOR3 lightDirection(0.0f, 1.0f, 0.0f); TheTerrain = new Terrain(Device, "coastMountain64.raw", 64, 64, 10, 0.1f); TheTerrain->genTexture(&lightDirection);
添加文字:
//font HDC hdc = CreateCompatibleDC( 0 ); HFONT hFont; HFONT hFontOld; LOGFONT lf; ZeroMemory(&lf, sizeof(LOGFONT)); lf.lfHeight = 25; // in logical units lf.lfWidth = 12; // in logical units lf.lfEscapement = 0; lf.lfOrientation = 0; lf.lfWeight = 100; // boldness, range 0(light) - 1000(bold) lf.lfItalic = true; lf.lfUnderline = true; lf.lfStrikeOut = true; lf.lfCharSet = DEFAULT_CHARSET; lf.lfOutPrecision = 0; lf.lfClipPrecision = 0; lf.lfQuality = 0; lf.lfPitchAndFamily = 0; strcpy_s(lf.lfFaceName, "Times New Roman"); // font style hFont = CreateFontIndirect(&lf); hFontOld = (HFONT)SelectObject(hdc, hFont); D3DXCreateText(Device, hdc,"wuliangliang 2012329700012",0.005f, 1.0f, &Text, 0, 0);

Direct3D游戏编程基础函数查询笔记

Direct3D游戏编程基础函数查询笔记

1.初始化Direct3D1.Direct3DCreate9 (D3D_SDK_VERSION);获得IDirect3D9接口2.IDirect3D9::GetDeviceCaps()获得主显示设备的性能。

确认硬件顶点性能3.D3DPRESENT_PARAMETERS_ { } 填充一结构用来描述需要创建的IDirect3DDevice9接口的信4.IDirect3D9::CreateDevice( ) 创建IDirect3DDevice9接口第二章绘制流水线5.struct 类型+vertex ()定义顶点结构6.#define FVF_COLOR(| |)描述顶点的组成格式7.Device->SetTransform (D3DTS_WORLD, &worldMatrix);从本地空间向世界空间的变换,:8.D3DXMatrixTranslation ()计算几何物体变换矩阵9.D3DXMATRIX* D3DXMatrixLookAtLH()计算视图空间变换矩阵,,也是观察空间10.Device->SetRenderState (D3DRS_CULLMODE, Value);背面消隐11.D3DXMATRIX* D3DXMatrixPerspectiveFovLH () 根据视域体信息创建投影矩阵12.typedef struct _D3DVIEWPORT9 { } 定义视口结构13.Device->SetViewport ()设置视口大小14.15.第三章在Direct3D中绘制图形16.17.device->CreateVertexBuffer ( ) 创建一个顶点缓冲区18.device->CreateIndexBuffer ( ) 创建一个索引缓冲区:19.Look ()获得指向缓存的指针20.GetDesc (&变量); (变量类型D3DVERTEXBUFFER_DESC)得到顶点缓冲区信息21.GetDesc (&变量); (变量类型D3DINDEXBUFFER_DESC)得到索引缓冲区信息22.HRESULT IDirect3DDevice9::SetRenderState()设置渲染状态,也是绘制23.SetStreamSource () 设置数据流来源,,大意是将顶点缓冲区和数据流挂接到一起24._device->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);设置顶点的格式25._device->SetIndices(_ib); //传进来索引缓冲区的指针,设置索引缓冲区的代码26._device->BeginScene(); 开始绘制27.DrawPrimitive ()从顶点缓冲区绘制,,从顶点流中获取顶点信息28.DrawIndexedPrimitive ()从索引缓冲区绘制当前的索引缓冲区中获得索引信息。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二DirectX渲染及图形绘制实验
项目1:DirectX渲染管道实验
在例程Cub的基础上,完成以下步骤:
1.修改Display函数中物体的旋转变换矩阵,使三维模型不再旋转。

2.修改摄像机位置坐标、观察点坐标、向上向量的值,记录以下状态时的值:
a)远距离拍摄。

b)近距离拍摄。

c)平面旋转90度。

3.修改变换矩阵的创建参数,即D3DXMatrixPerspectiveFovLH()函数的参数,观察并记录以下参数对应的画面:
a)近平面距离设为1000,远平面距离设为1000。

b)近平面距离设为1,远平面距离设为5。

c)近平面距离设为1,远平面距离设为1000。

d)宽高比:(float)width*1.5/(float)height
e)宽高比:(float)width*0.5/(float)height
f)宽高比:(float)width/(float)height
项目2:DirectX图形绘制实验
在例程Cub的基础上,完成以下步骤:
1.修改8个顶点中任一个一个顶点的值,观察并记录画面。

2.增加一个顶点数据(第9个顶点),具体值为:(2.0f,1.0f,1.0f)。

观察并记录画面。

此处需要注意顶点缓冲区创建的缓冲区大小参数为9个顶点(Vertex)。

3.增加一个三角形数据,即三个索引缓冲区,具体值为:6,7,8。

观察并记录画面。

此处需要注意索引缓冲区创建的缓冲区大小参数为39个索引(WORD)。

4.再增加两个三角形数据,具体值为自行设定,观察并记录画面。

此处需要注意索引缓冲区创建的缓冲区大小参数为39+6个索引(WORD)。

5.改变渲染状态,分别设置渲染的FILLMODE为线框模式、顶点模式和面模式,观察并记录画面。

项目一:
1
A
B
C
A
B
C
D
E
F
1:
2:
3:
4:
5:
A:
线框模式:
点模式:
C面模式。

相关文档
最新文档