Directx

引用网址:http://blog.csdn.net/iduosi/article/details/7786148

开发directx笔记

环境配置

安装directx

运行安装文件DXSDK_Jun10.exe  下载链接地址:

wps_clip_image-29900

注意:如果电脑之前有安装Microsoft Visual C++ 2010 Redistributable的更新版,安装最后回报告错误error s1023的错误!

安装codeblocks

Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境。 Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。

codeblocks的版本:12.11 (版本不限,随意)

相关设置:

1.关闭spellcheck插件(这个插件回检查拼写语法错误,如果你不想到处都是下划波浪线的话!)

2.对codeblocks的相关设置,均要在运行管理员权限后更改保存才有效,否则,软件不会保存你对codeblocks的设置

配置directx

codeblocks

给codeblocks设置环境变量

计算机 --->  属性  ---->  高级  ---->环境变量 -----> path添加  ..\CodeBlocks\MinGW\bin

运行codeblocks 打开Global Variable Editor , 添加 directx

正确链接所需.lib文件

wps_clip_image-32233

在search directory中添加directx的运行dll  lib  include 

完成。

vs配置

启动VS

新建项目,为了不会污染到原来的开发软件的环境,我们可以考虑添加属性表的方式(vs2010之前的版本编译器没有此功能)

wps_clip_image-21107

选择wps_clip_image-10022,

2.  wps_clip_image-3146这个是DirectX头文件所在的地方,点击下面的新建文件夹按钮将DirectX头文件所在的路径输入进去。

D:\Microsoft DirectX SDK (June 2010)\Include

3. wps_clip_image-25749选择Library fies,这是.lib文件所在的地方,如法炮制,将DirectX .lib文件的路径输入进去,在我这里是

D:\Microsoft DirectX SDK (June 2010)\Lib\x86

wps_clip_image-28736wps_clip_image-19598---->  wps_clip_image-17123 添加程序运行需要的lib文件名

常用的lib文件

dxerr.lib
dxguid.lib
d3dx9d.lib
d3dx10d.lib
d3d9.lib
winmm.lib
comctl32.lib

4. 到这里,vs2010中DirectX开发环境的配置就完成了。

5. 另外增加一点就是如果提示转换错误的话要在项目属性->配置属性->常规->字符集 中选择“使用多字节字符集”

最简单的directx3D 程序

1.direct3D 初始化操作:创建directx3D对象并获取其接口指针,通过Directx3D对象创建Directx3D设备对象。通过同一个Direct3D对象创建的所有的Directx3D设备对象共享相同的物理资源

wps_clip_image-25240

D3DPRESENT_PARAMETERS定义了Direct3D设备对象的相关信息

其中D3DFMT_UNKNOWN 使后台缓存的像素格式和当前显示卡的像素格式相同

BackBufferWidth 后台缓冲区的宽         BackBufferHeight  后台缓冲区的高wps_clip_image-19979

BackBufferFormat:后备缓冲的格式。

BackBufferCount:后备缓冲的数目,范围是从0到3,如果为0,那就当成1来处理。大多数情况我们只使用一个后备缓冲。使用多个后备缓冲可以使画面很流畅,但是却会造成输入设备响应过慢,还会消耗很多内存。MultiSampleType 和MultiSampleQuality:前者指的是全屏抗锯齿的类型,后者指的是全屏抗锯齿的质量等级。这两个参数可以使你的渲染场景变得更好看,但是却消耗你很多内存资源,而且,并不是所有的显卡都支持这两者的所设定的功能的。在这里我们分别把它们设为D3DMULTISAMPLE_NONE和0。通过CheckDeviceMultiSampleType 来检测当前装置是否支持某个抗锯齿类型。通过CheckDeviceMultiSampleType 来检测当前装置是否支持某个抗锯齿类型。hDeviceWindow:显示设备输出窗口的句柄。Windowed:如果为FALSE,表示要渲染全屏。如果为TRUE,表示要渲染窗口。渲染全屏的时候,BackBufferWidth和BackBufferHeight的值就得符合显示模式中所设定的值。EnableAutoDepthStencil:如果要使用Z缓冲或模板缓冲,则把它设为TRUE。AutoDepthStencilFormat:如果不使用深度缓冲,那么这个参数将没有用。如果启动了深度缓冲,那么这个参数将为深度缓冲设定缓冲格式。

常用值D3DFMT_24S8 (24 深度缓冲,8模板缓冲)

D3DFMT_24X8(24 深度缓冲)

D3DFMT_16(16深度缓冲)//深度缓存和模板缓存的象素格式

D3DFMT_D24S8 , 24 位表示深度,8位为模板缓存。

D3DFMT_32 //32位深度

注意如果设置模板缓冲在Clear() 函数中也要清楚模板缓冲:设置参数 D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL。

FullScreen_RefreshRateInHz:显示器的刷新率,单位是HZ,如果设定了一个显示器不支持的刷新率,将会不能创建设备或发出警告信息。为了方便,一般设为D3DPRESENT_RATE_DEFAULT就行了。PresentationInterval:如果设置为D3DPRENSENT_INTERVAL_DEFAULT,则说明在显示一个渲染画面的时候必要等候显示器刷新完一次屏幕。例如你的显示器刷新率设为80HZ的话,则一秒内你最多可以显示80个渲染画面。另外你也可以设置在显示器刷新一次屏幕的时间内显示1到4个画面。如果设置为 D3DPRENSENT_INTERVAL_IMMEDIATE,则表示可以以实时的方式来显示渲染画面,虽然这样可以提高帧速(FPS),如果速度过快却会产生图像撕裂的情况,但当游戏完成时,帧速度一般不会过快。

2.Direct3D的渲染操作

wps_clip_image-29677

Clear()清除一个或多个表面的内容,

结束Direct3D程序

鬼火游戏引擎剖析

抽丝剥茧的关键----线头 irrlicht.h

纵观irrlicht.h ,建立了一个域名irr , 包含了其他5个空间域名:

core  容器类和数学库

gui   二维GUI控件

io    

scene 三维场景绘制和管理

video 图片纹理的载入和管理

声明了一个重要的引擎设备函数:

wps_clip_image-12738

deviceType 设备类型,支持DT_NULL DT_SOFTWARE DT_DIRECTX8 DT_OPENGL

windowSize 窗口大小或全屏时的视频模式

bits  在全屏模式下每个像素的位。若是窗口模式,则忽略 

fullscreen  如果为true,该设备应在全屏运行,否则设备运行在窗口模式

receiver 用户创建时间接收器,用于返回创建的Irrlicht设备对象的指针,若创建失

            则返回NULL

 

irrTypes.h:为了保证引擎的可移植性,对各个数据类型进行了typedef操作。即Irrlicht引擎所有基本数据类型的集合。

IeventReceiver.h:使用枚举类型分别保存了gui事件、鼠标事件和键盘事件三种事件类型。将全部事件类型封装成接口。

IUnknown.h:实现IUnknown类,该类建立了引用计数机制,通过grab,drop管理对象引用次数。还为每个对象的实例存储调试字符串,获取和设置调试名称。该类是Irrlicht引擎大多数类的基类。

irr::core:

position2d.h:实现了一个支持2d坐标的简单类模板

irrmath.h:浮点数比较时的舍入精度,圆周率,以及用于角度与弧度之间转换的常数值

vector2d.h:实现了一个2D向量的模板类

line3d.h:文件中实现在了3d环境中,线段的相关定义。构造了line3d模板类,从该类中定义的成员类型来看,使用了3d向量

vector3d.h:在该文件中,实现了3d向量的类模板及其相关定义。如旋转坐标,运算符重载,点积,叉积,求两点间距离等操作。

dimension2d.h:实现了一个指定2维尺寸的模板类。

line2d.h: 实现了2维平面里线段的定义,创建了lined2d模板类。由此发现引擎作者是在先现实了2d向量和3d向量的基础上,建立的两点间线段的处理类。即今天至此解决了core模块中向量数据类型的实现。

plane3d.h:定义了点与平面的相交关系,创建了平面模板类。

plane3dex.h:是平面模板类的扩展版,运算速度更快

aabbox3d.h:实现了边界盒的相关操作,如边界盒与点、平面、边界盒的相交关系,重载运算符等等。

heapsort.h:实现了一个堆排序的算法。

array.h:实现了数组模板类,感觉就像SLT中的vector,该数组有堆排序、二分查找、增删元素、易调试等特点。

但在二分查找函数中,有语句如下:

   if (!(element < data[m]) &&!(data[m] < element)) { return m;} 

    // 为什么不直接写if(element== data[m]){ return m; } 

    // 因为用于浮点数比较

irrstring.h:实现了字符串模板类,类似于STL中的string。

rect.h:实现矩形模板类,具有碰撞检测的功能。模板类rect的对象以尺寸和左上角坐标确定矩形大小及位置,扩展的模板类rectEx的对象以左上角坐标和右下角坐标确定矩形大小及位置。

list.h:实现了一个双端链表模板类。

matrix4.h:实现了一个4x4矩阵模板类,主要是在3D运算中用于矩阵各种转换操作。

posted @ 2014-07-11 09:08  dota2_black  阅读(889)  评论(0编辑  收藏  举报