《游戏设计》课程设计指导书_第1页
《游戏设计》课程设计指导书_第2页
《游戏设计》课程设计指导书_第3页
《游戏设计》课程设计指导书_第4页
《游戏设计》课程设计指导书_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、游戏设计课程设计指导书编写:蔺广逢适用于:数字媒体专业2011.12游戏设计课程设计任务书设计时间:1周 学 分 数:1.0执笔人:范彩霞 编写日期:2008年10月一、课程设计目的游戏设计课程设计是数字媒体技术专业必修的实践环节。本课程设计是游戏设计课程实践环节的深化和延续。通过该实践环节的训练,使学生能够更加全面和系统的掌握游戏设计的体系结构。通过对所做游戏的故事梗概、游戏类型以及设计制作过程中所涉及的相关技术的学习和掌握,提高学生的实践能力以及团队协作能力,为在计算机游戏设计这一领域进行深入研究做准备。二、课程设计的内容与要求本课程设计通过分组来进行,每组34人。对每一个组,都必须设计和

2、实现一个完整的游戏,游戏的类型不限,软件运行环境限为Microsoft Windows,硬件平台限为PC。在每组进行游戏设计之前必须提供游戏文档说明,包括游戏的故事情节、游戏的类型、游戏界面的设计等。每组设计的游戏不一定是原创的,但绝不能抄袭已有的游戏。每组设计的游戏需要有较为完整的情节,要求能体现以下的基本技术:提供使用键盘或鼠标控制视点的朝向和运动的功能;在游戏中至少有一个人物是三维的,并且能产生相应的动画。必须在某个场景中有配音或者背景音乐;最好能在某一个画面中体现一些特效技术;必须能实时或者准实时运行。游戏设计完成后对自己所做的游戏进行短评,包括:游戏中的哪一部分是最得意的?对最初的游

3、戏设计作了哪些修改,为什么?在这个游戏项目的实践中获得的经验和教训是什么?如果有更多的时间下一步会怎么做?三、课程设计的报告(论文、作业)的要求 课程设计报告是课程设计过程的整理和总结。因此,编写课程设计报告是课程设计阶段的一个重要组成部分。课程设计报告的内容和要求根据设计内容而定,对于本课程设计,主要应包括以下内容:封面:封面上应标明“游戏设计课程设计”报告、专业、姓名、学号与时间等;课程设计报告内容主要包括:(1)课程设计的目的;(2)课程设计的内容:主要包括:游戏的故事摘要 ;游戏的类型;各成员的分工;制作工具;流程图以及如何玩这个游戏。重点写明设计思想,制作步骤、制作过程中出现的问题、

4、解决方案等;(3)总结:总结成功之处与问题所在,自己通过本次课程设计有什么收获和感悟。四、课程设计考核与成绩评定根据学生的实验准备、操作能力、实验结果、实验报告质量、实验纪律等综合评定实验成绩。(1)总分100分:其中考勤10分,作品50分,课程设计报告40分;(2)考勤每天上、下午1次,每次2分;(3)如发现有严重抄袭者,个人成绩以零分计;(4)课程设计报告以准确、规范、认真等指标进行打分,不得抄袭,否则总成绩按零分计。五、课程设计纪律及注意事项(1)每位参加课程设计的同学必须认真对待,积极参加;(2)从严要求自己,不随意迟到、早退和旷课,有事需例行请假手续,实验室内不得玩计算机游戏;(3)

5、在课程设计中应积极发挥个人主观能动性,勤于思考,虚心向指导教师、实验室教师请教,服从实验室教师的安排;(4)爱护实验室的所有财产,不得私自删除机器上系统文件;(5)保持实验室的整洁卫生。凡违反课程设计纪律者,指导教师或实验室教师有权进行批评教育或终止其课程设计,成绩以零分记。DirectX初级教程1. 开发环境32. 3D基本概念32.1 几种颜色的变量类型及其相关函数应注意区分:32.2 材质42.3 向量42.4 光源42.5 摄像机(camera)43. 创建D3D设备53.1 Direct3DCreate9 ( )53.2 CreateDevice ( )53.3 基本变量53.4 其

6、他要调用的函数及变量(调用次数较少)54. 基本渲染顶点64.1  定义顶点格式和;64.2 创建顶点缓冲区并填充之;64.3D3D进行渲染;75. 使用顶点索引缓冲区85.1 创建顶点索引缓冲区并填充之85.2 将顶点索引缓冲区设置到渲染管道流水线96. 摄像机106.1 D3D中使用的几种常用的向量106.2D3D相机中使用的几种常用的关于向量的函数106.3点和向量的区别116.3 Camera相机矩阵计算问题117.基本纹理应用127.1 纹理尺寸127.2 纹理坐标127.3 基本纹理添加步骤以及所使用的函数128.模型加载141.装载模型142.填充纹理和材质143.渲染

7、141. 开发环境注意,一定要把新加的SDK路径移动到目录列表的最上方,因为VC是按顺序搜索路径的。最基本的DX定义规范:I开头的是接口;D3D开头的一般是定义的一些结构;D3DX是封装了操作的扩展结构;2. 3D基本概念2.1 几种颜色的变量类型及其相关函数应注意区分:D3DCOLOR、D3DXCOLOR、D3DCOLORVALUE。注意:1. D3DCOLOR属于DWORD型的变量,其定义包含在d3d9types.h文件中;2. D3DXCOLOR属于结构体类型,其定义包含在d3dx9math.h中:typedef struct D3DXCOLOR  FLOAT r;

8、FLOAT g; FLOAT b; FLOAT a; D3DXCOLOR; / r, g, b, a的范围在0.0f-255.0f之间3. D3DCOLORVALUE同属于结构体类型,其定义包含在d3d9types.h文件中:typedef struct _D3DCOLORVALUE  float r; float g; float b; float a; D3DCOLORVALUE; / r, g, b, a的范围在0.0f-1.0f之间与各个变量相对应的函数或宏也包含在与变量相对应的头文件中(带有x的变量其对应

9、头文件也包含x,方便记忆)。下边介绍相关函数及宏。1. 与D3DCOLOR相对应的宏有以下4个:1. #define D3DCOLOR_ARGB(a , r, g, b) (D3DCOLOR)(a)&0xff)<<24)|(r)&0xff)<<16)|(g)&0xff)<<8)|(b)&0xff)2. #define D3DCOLOR_RGBA(r, g, b, a) D3DCOLOR_ARGB(a,r,g,b)3. #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)

10、其中该宏的Alpha值定义为255,完全不透明。4. #define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA(DWORD)(r)*255.f),(DWORD)(g)*255.f),(DWORD)(b)*255.f), (DWORD)(a)*255.f)前三个宏的r,g,b,a值均为整型数,最后一个必须是从0.0到1.0的浮点型数。2.2 材质材质的定义是:材质typedef struct _D3DMATERIAL9 D3DCOLORVALUE Diffuse; / 漫反射光D3DCOLORVALUE Ambient; / 环境光,理解为整

11、体亮度D3DCOLORVALUE Specular; / 镜面反射,一般用于光滑的平面D3DCOLORVALUE Emissive; / 放射光,一般用于自发光体(太阳、灯) 对于材质设置,自发光不应太强。float Power; / 指定镜面高光的强度 D3DMATERIAL9;2.3 向量typedef struct _D3DVECTOR   float  x, y, z; D3DVECTOR; 该定义包含在d3d9types.h头文件中。2.4 光源typedef struct _D3DLIGHT9  D3DLIGHTTYPE Type; / 光源

12、类型,有点光源、聚焦光源、方向光源3种 D3DCOLORVALUE Diffuse; / 漫反射光颜色D3DCOLORVALUE Specular; / 镜面反射光颜色D3DCOLORVALUE Ambient; / 环境光颜色D3DVECTOR Position; / 光源位置(对方向光源无效,如果创建方向光源可忽略)D3DVECTOR Direction; / 方向(对点光源无效,如果创建点光源无效可忽略。可以是非单位向量,但是不能是0向量)float Range; / 光的范围,就是能照多远(对方向光无效,如果创建方向光源可忽略)float Falloff; / 聚光内外光圈的

13、径向强度衰减,一般为1.0f (只针对聚焦光源)float Attenuation0; / 距离衰减0(创建方向光源可忽略,非方向光源一般3个距离衰减均取取0.0f)float Attenuation1; / 距离衰减1(创建方向光源可忽略,非方向光源一般3个距离衰减均取取0.0f)float Attenuation2; / 距离衰减2(创建方向光源可忽略,非方向光源一般3个距离衰减均取取0.0f)float Theta; / 指定聚光内圈的夹角大小(0-Phi)(只针对聚焦光源) float Phi; / 指定聚光外圈的夹角大小(0-pi)(只针对聚焦光源) D3DLIGHT9;注:1. 这

14、里非方向光源指 点光源 和 聚焦光源。2. 添加光照并开启光照,而且必须为模型或面添加了法向量及材质,光源才起作用。 即光照三要素:光照、材质、法向量。2.5 摄像机(camera)摄像机的确定有两个主要参数:一个位置和一个方向。将摄像机设置到场景中要用到SetTransform( D3DTS_VIEW, &m_matView ); / m_matView就是摄象机的观察矩阵。3. 创建D3D设备所需的主要的2个函数和3个变量(其余函数根据所需变量的填充要求而定)3.1 Direct3DCreate9 ( )其原型为IDirect3D9  * Direct3DCreate9

15、(   UINT SDKVersion ); SDKVersion为SDK版本值,函数及SDKVersion的定义包含在d3d9.h中,编译过程中需要d3d9.lib链接库。3.2 CreateDevice ( )HRESULT  CreateDevice ( UINT Adapter,      D3DDEVTYPE DeviceType, HWND hFocusWindow,      DWORD BehaviorFlag

16、s,      D3DPRESENT_PARAMETERS *pPresentationParameters,     IDirect3DDevice9* ppReturnedDeviceInterface );参数解释:UINT Adapter 一般使用D3DADAPTER_DEFAULT代表主适配器(即显示器);D3DDEVTYPE DeviceTypeD3DDEVTYPE_HAL代表使用硬件加速方式,D3DDEVTYPE_REF代表使用软件仿真方式;HWND 

17、hFocusWindow代表要创建D3D设备的窗口的句柄    DWORD BehaviorFlags处理标识:最常用的选项有 D3DCREATE_HARDWARE_VERTEXPROCESSING硬件处理 D3DCREATE_SOFTWARE_VERTEXPROCESSING软件处理D3DCREATE_MIXED_VERTEXPROCESSING软硬件结合处理D3DPRESENT_PARAMETERS *pPresentationParameters描述设备显示参数的结构体,一般要调用其他函数来填充该结构体;IDirect3DDev

18、ice9* ppReturnedDeviceInterface用于返回D3D的设备对象指针。3.3 基本变量 D3DCAPS9、D3DDISPLAYMODE、D3DPRESENT_PARAMETERS三个比较基本的变量,用于描述显示设备创建时的相关参数。3.4 其他要调用的函数及变量(调用次数较少) HRESULT  GetDeviceCaps(   UINT Adapter,     D3DDEVTYPE DeviceType,     D3DCAPS9

19、 *pCaps); HRESULT  GetAdapterDisplayMode(  UINT Adapter,     D3DDISPLAYMODE *pMode);UINT  GetAdapterCount( VOID );4. 基本渲染顶点渲染的基本步骤是这样的:4.1  定义顶点格式和; 顶点格式必须与FVF中定义的一致,这样流水线才能识别。如:struct CUSTOMVERTEX  FLOAT x, y, z; / 顶点坐标 DWORD color; /

20、 顶点颜色;与之相对应的FVF为蓝色部分。#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)4.2 创建顶点缓冲区并填充之; 使用的基本函数有:1. CreateVertexBuffer(); HRESULT CreateVertexBuffer(   UINT Length,     DWORD Usage,     DWORD FVF,    

21、 D3DPOOL Pool,     IDirect3DVertexBuffer9* ppVertexBuffer,     HANDLE* pHandle);UINT Length用来指定顶点缓冲区的大小;DWORD Usage一般设置为0;DWORD FVF自定义可变顶点格式;D3DPOOL Pool可用D3DPOOL _DEFAULT = 0 (一般用这个比较多),D3DPOOL_MANAGED = 1, &#

22、160;   D3DPOOL_SYSTEMMEM = 2,     D3DPOOL_SCRATCH = 3,IDirect3DVertexBuffer9* ppVertexBuffer指向顶点缓冲区COM对象的指针。HANDLE* pHandle 一般设置为NULL。2. Lock() HRESULT Lock( UINT OffsetToLock,     UINT SizeToLock,    

23、; VOID *ppbData,     DWORD Flags);UINT OffsetToLock,锁定区域偏移量,一般为0;     UINT SizeToLock, 要锁定区域的大小;     VOID *ppbData, 返回指向缓冲区数据的指针;     DWORD Flags 锁定行为标识符,一般设置为0;3. memcpy( )(用此函数将计算好的数据拷贝进缓冲

24、区),如memcpy(in,out,sizeof(buffer);4. HRESULT Unlock(VOID); 解除对数据区的锁定,一边流水线渲染可以正常执行。4.3 D3D进行渲染;有两个基本函数:1. SetStreamSource()用于将顶缓冲区设置到流水线中; HRESULT SetStreamSource(    UINT StreamNumber,     IDirect3DVertexBuffer9 *pStreamData,  

25、60;  UINT OffsetInBytes,     UINT Stride ); UINT StreamNumber 一般设置为0;IDirect3DVertexBuffer9 *pStreamData 指向顶点缓冲区COM对象的指针;     UINT OffsetInBytes 指针偏移量不偏移则取0;     UINT Stride 顶点跨距,即每个顶点所占的字节数2. SetFVF()用于将顶

26、点自定义格式传递给流水线。注:IDirect3DDevice9:SetFVF(Vertex:FVF) FVF保存着顶点描述,FVF的定义形式如下: #define FVF (D3DFVF_XYZ|D3DFVF_DIFFUSE)或  DWORD const dwFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE ); D3DFVF_XYZ:表示顶点格式中包含顶点坐标信息。它告知系统你的游戏没有变换过顶点,要求Direct3D来做顶点的变换工作。 D3DFVF_XYZRHW:告知系统你的游戏引擎已对顶点作过

27、变换,Direct3D不需要再对它们作变换。也就是说,Direct3D就不会再用世界矩阵、观察矩阵或投射矩阵来变换顶点了。 D3DFVF_DIFFUSE:表示顶点格式中包含了一个漫反射颜色信息。 D3DFVF_SPECULAR:表示顶点格式中包含一个镜面反射颜色成分。 D3DFVF_NORMAL:表示顶点格式中包含有顶点朝向信息(即法线向量)。 D3DFVF_TEX0 D3DFVF_TEX8:包含顶点格式坐标的个数(1-8个)。 例如: typedef struct SObjVertex FLOAT x, y, z; / position FLOAT nx, ny, nz; / normal

28、DWORD diffuse; / diffuse color DWORD specular; / specular color FLOAT tu, tv; / first pair of texture coordinates FLOAT tu2, tv2, tw2; / second pair of texture coordinates FLOAT tu3, tv3; / third pair of texture coordinates FLOAT tu4, tv4; / fourth pair of texture coordinates SObjVertex; const DWORD

29、 gSObjVertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_NORMAL | D3DFVF_TEX4 | D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE3(1) | D3DFVF_TEXCOORDSIZE2(2) | D3DFVF_TEXCOORDSIZE2(3);   IDirect3DDevice9:DrawPrimitive: HRESULT DrawPrimitive( D3DPRIMITIVETYPE PrimitiveType, UINT S

30、tartVertex, UINT PrimitiveCount ); PrimitiveType:定义了要使用的图元的类型。共有六种: typedef enum D3DPRIMITIVETYPE D3DPT_POINTLIST = 1, /点,图元个数N D3DPT_LINELIST = 2,/线,图元个数为N/2 D3DPT_LINESTRIP = 3,/ D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff, D3DPRIMITIVETYP

31、E, *LPD3DPRIMITIVETYPE; StarVertex:设置从顶点缓冲区中的第几个顶点画起。 PrimitiveCount:要绘画的图元的数量。 3. DrawPrimitive() HRESULT DrawPrimitive(   D3DPRIMITIVETYPE PrimitiveType, 图元类型     UINT StartVertex, 起始顶点     UINT PrimitiveCount 要绘制的图元个数);完成上

32、述过程就可以对定点进行渲染了。渲染函数DrawPrimitive()不对顶点的格式进行再次检查:比如同一个缓冲区可以,你本来打算是用来画三角形列表,但也可以画直线,或者三角形带、扇形等,函数不会再次检查。5. 使用顶点索引缓冲区在一个3D模型中一个点可能要同时处于多个三角形面上,如果直接把顶点数据放进缓冲区,那么重复的顶点就会占用多余的内存。使用顶点缓冲区把顶点的具体数据和代表三角形的顶点的索引分开存储,顶点数据还是放到顶点缓冲区中,顶点索引存储在顶点索引缓冲区中,这样可以节省不少内存,避免点的重复存储。5.1 创建顶点索引缓冲区并填充之使用到的函数:1. HRESULT Creat

33、eIndexBuffer(    UINT Length,    DWORD Usage,      D3DFORMAT Format,     D3DPOOL Pool,     IDirect3DIndexBuffer9* ppIndexBuffer,      HANDLE* pHandle ); 用于创建顶点索

34、引缓冲区UINT Length 顶点索引缓冲区的大小,有多少个索引,就有多少个顶点的字节大小;    DWORD Usage 可以置为0;    D3DFORMAT Format D3DFMT_INDEX16,D3DFMT_INDEX32分别表示用16位(可存储65536个顶点),32位存(可存储65536*65536个顶点)储索引值。     D3DPOOL Pool 可取D3DPOOL_DEFAULT;    

35、IDirect3DIndexBuffer9* ppIndexBuffer 顶点索引缓冲区的COM对象指针;    HANDLE* pHandle 一般值为NULL; 2. HRESULT  Lock(   UINT OffsetToLock,     UINT SizeToLock,     VOID *ppbData,     DWORD Fla

36、gs ); 用于锁定顶点索引缓冲区并返回索引数据区指针; UINT OffsetToLock 锁定偏移量,一般设置为0;     UINT SizeToLock 顶点索引缓冲区的字节数,等于顶点索引个数 * 索引位深 / 8;     VOID *ppbData 返回指向顶点索引缓冲数据区的指针,以便数据复制;     DWORD Flags 一般设置为0;3. HRESULT  Unlock (VOID);用于解除顶点索引缓

37、冲区区注意:一般手动填充顶点索引缓冲区,因为那几个顶点构成一个三角形有自己来确定;5.2 将顶点索引缓冲区设置到渲染管道流水线1. HRESULT  SetIndices( IDirect3DIndexBuffer9  * pIndexData );其中的pIndexData为指向顶点索引缓冲区COM对象的指针; 2. HRESULT DrawIndexedPrimitive(   D3DPRIMITIVETYPE Type,     INT BaseVertexI

38、ndex,     UINT MinIndex,     UINT NumVertices,     UINT StartIndex,     UINT PrimitiveCount );  D3DPRIMITIVETYPE Type, 图元类型;     INT BaseVertexIndex, 初始顶点的索引值的偏移量,一般

39、为0;    UINT MinIndex, 最小顶点索引值,一般为0;     UINT NumVertices, 顶点缓冲区中的顶点数量;     UINT StartIndex, 起始的顶点索引,一般为0;     UINT PrimitiveCount 需要渲染的图元的个数;顶点索引缓冲区中的顶点顺序很重要,因为默认情况下,流水线只绘制点排列顺序为逆时针的三角形,而不绘制排列顺序为顺时针的三角形(可以

40、设置为NOCULL模式这样渲染管线不裁剪)。包含D3DFVF_XYZRHW的点可以直接绘制在屏幕上,而不需要变换。这是因为生成一个包含D3DFVF_XYZRHW属性的VertexBuffer对象,渲染流水线会认为改点已经进行了顶点变换,不要再将顶点数据作变换(不乘世界矩阵,视矩阵,投影矩阵)。这是绘图时用的坐标系可以理解为简单的屏幕坐标系(即x正方向水平向左,y正方向竖直向下)英文:The RHW float, when set to one, indicates that the vertice are not to be transformed. This is used for GUI

41、developement. setting the RHW tells the direct3d pipeline NOT to apply any transformations matrices to them and you can think of them as pure 2d coords instead of 3d coords.6. 摄像机6.1 D3D中使用的几种常用的向量常用的有以下几种:1. D3DVECTOR定义在d3d9types.h头文件中,其为结构体,定义如下: typedef struct _D3DVECTOR  float x, y, z;

42、 D3DVECTOR; D3DVECTOR属于3维向量。2. D3DXVECTOR2定义如下: typedef struct D3DXVECTOR2  FLOAT x; FLOAT y; D3DXVECTOR2; D3DXVECTOR2属于2维向量。D3DXVECTOR3定义如下:typedef struct FLOAT x; FLOAT y; FLOAT z; D3DXVECTOR3; D3DXVECTOR3属于3维向量。D3DXVECTOR4定义如下:typedef struct D3DXVECTOR4  FLOAT&#

43、160;x; FLOAT y; FLOAT z; FLOAT w; D3DXVECTOR4; D3DXVECTOR4属于4维向量。以上三者均在d3dxmath.h中定义(记忆方法同D3DCOLOR、D3DXCOLOR)。6.2 D3D相机中使用的几种常用的关于向量的函数1. D3DXVec3Dot ();2. D3DXVec3Normalize ();3. D3DXVec3Cross ();4. D3DXMatrixRotationAxis ();5. D3DXVec3TransformCoord ();介绍:1. FLOAT  D3DXVec3Dot

44、(  CONST D3DXVECTOR3 *pV1,CONST D3DXVECTOR3 *pV2 ); 该函数用于计算两个三维向量的点乘,并返回最终结果。2. D3DXVECTOR3 * WINAPI  D3DXVec3Normalize(  D3DXVECTOR3 *pOut,     CONST D3DXVECTOR3 *pV );该函数用于计算第二个向量的单位向量(即归一化向量),第二个参数为source即传入向量,并将计算结果存放于第一个参数中或返

45、回。 3. D3DXVECTOR3 * D3DXVec3Cross(  D3DXVECTOR3 * pOut,     CONST D3DXVECTOR3 * pV1,     CONST D3DXVECTOR3 * pV2 ); 该函数用于计算后两个向量的叉乘,并将结果放于第一个参数中或返回。4. D3DXMATRIX * D3DXMatrixRotationAxis ( D3DXMATRIX * pOut,  &

46、#160;  CONST D3DXVECTOR3 * pV,     FLOAT  Angle );D3DXMATRIX * pOut根据旋转角度和转轴计算出来的绕pV轴旋转Angle弧度应使用的旋转矩阵。     CONST D3DXVECTOR3 * pV用于定义旋转轴的向量。     FLOAT  Angle 旋转过的弧度,因为实在左手坐标系中,所以顺时针转动为正。Angles are measured clo

47、ckwise when looking along the rotation axis toward the origin5. 下面来看看D3DXVec3TransformCoord()函数:D3DXVECTOR3  * D3DXVec3TransformCoord(  D3DXVECTOR3 * pOut,     CONST D3DXVECTOR3 * pV,     CONST D3DXMATRIX * pM );计算点pV经过矩阵pM旋转后的值,并将值放于p

48、Out中或返回。6.3 点和向量的区别坐标和向量是有区别的:向量的第四维数值是0,坐标的第四维数值是1;向量 = 两个坐标的差值 ,第四维同样做减法,结果是0;向量的坐标变换用D3DXVec3TransformNormal, 点的变换用D3DXVec3TransformCoord。D3DXVec3Transform和D3DXVec3TransformCoord相似,区别在于后者变换后将w投射回1。6.3 Camera相机矩阵计算问题参见函数D3DXMatrixLookatLH()其最终计算出来的相机矩阵各个参数如下:D3DXMATRIX  * WINAPI  D3

49、DXMatrixLookAtLH(  D3DXMATRIX *pOut,     CONST D3DXVECTOR3 *pEye,     CONST D3DXVECTOR3 *pAt,     CONST D3DXVECTOR3 *pUp );RemarksThe return value for this function is the same value returned in the pOut parame

50、ter. In this way, the D3DXMatrixLookAtLH function can be used as a parameter for another function.This function uses the following formula(表达式) to compute the returned matrix.cam_pos = eye.cam_lookat = zaxis = normal(At - Eye) (在RH中为normal(Eye-At))cam_right = xaxis = normal(cross(Up, zaxis)cam_up =

51、cross(zaxis, xaxis) xaxis.x yaxis.x zaxis.x 0 xaxis.y yaxis.y zaxis.y 0 xaxis.z yaxis.z zaxis.z 0-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) 17.基本纹理应用7.1 纹理尺寸纹理都是2D的图片,它可以保存为bmp、tga、jpg或是任何一种常见的图片格式,所以它肯定有大小。虽然理论上现在的新型显卡可以支持任意尺寸的纹理,不过为了兼容以前的显卡也为了程序的执行效率,你最好把纹理的尺寸做成的n次方。如:16 x 16, 32 x 32, 64

52、x 64, 128 x 128, 256 x 256等等。7.2 纹理坐标纹理坐标又叫贴图坐标,在D3D中用两个0到1的浮点值(U,V)来设置一个点的纹理坐标,U是横轴、是纵轴。纹理的左上角为(0,0),右下角为(1,1)。7.3 基本纹理添加步骤以及所使用的函数1. 为顶点添加纹理坐标u、v并修改顶点的FVF2. 定义纹理对象指针并创建纹理对象。 如: LPDIRECT3DTEXTURE9 ppTexture; / 定义纹理对象指针 HRESULT  D3DXCreateTextureFromFile(  LPDIRECT3DDEVICE9  pDev

53、ice,      LPCTSTR pSrcFile,       LPDIRECT3DTEXTURE9  * ppTexture ); LPDIRECT3DDEVICE9  pDevice, / 设备对象     LPCTSTR pSrcFile, / 待作为纹理的图像名称LPDIRECT3DTEXTURE9  * ppTexture ); / 纹理对象指针3. 将纹理设置到渲染管线并渲染1. HRESULT SetText

54、ure( DWORD Sampler, /将一张纹理指派给设备中的某个特定的阶段 IDirect3DBaseTexture9 * pTexture) /纹理对象指针 SetTexture()方法将一张纹理指派给设备中的某个特定的阶段。Direct3D提供了8个阶段(0到7),这意味着可以为一次DrawPrimitive()调用同时设置最多8张纹理。(然而,你也可以多次调用DrawPrimitive(),这称“多次渲染”)。SetTexture()的第一个参数中给出一个希望使用的纹理阶段编号。第二个参数为纹理对象指针。当一个应用程序选择了一张纹理作为当前纹理时,它就指示Direct3D设备在下一次改变当前纹理之前,一直将该纹理应用到所有被渲染的图元上去。如果3D场景中的每个图元都有其自己的纹理,则必需在绘制每个图元之前设置相应的纹理,也就是说应在调用DrawPrimitive()函数之前进行纹理设置。 2. HRESULT SetTextureStageState( D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论