引用网址:http://blog.csdn.net/iduosi/article/details/7786148
开发directx笔记
环境配置
安装directx
运行安装文件DXSDK_Jun10.exe 下载链接地址:
注意:如果电脑之前有安装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添加 ..CodeBlocksMinGWin
运行codeblocks 打开Global Variable Editor , 添加 directx
正确链接所需.lib文件
在search directory中添加directx的运行dll lib include
完成。
vs配置
启动VS
新建项目,为了不会污染到原来的开发软件的环境,我们可以考虑添加属性表的方式(vs2010之前的版本编译器没有此功能)
2. 这个是DirectX头文件所在的地方,点击下面的新建文件夹按钮将DirectX头文件所在的路径输入进去。
D:Microsoft DirectX SDK (June 2010)Include
3. 选择Library fies,这是.lib文件所在的地方,如法炮制,将DirectX .lib文件的路径输入进去,在我这里是
D:Microsoft DirectX SDK (June 2010)Libx86
常用的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设备对象共享相同的物理资源
D3DPRESENT_PARAMETERS定义了Direct3D设备对象的相关信息
其中D3DFMT_UNKNOWN 使后台缓存的像素格式和当前显示卡的像素格式相同
BackBufferWidth 后台缓冲区的宽 BackBufferHeight 后台缓冲区的高
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的渲染操作
Clear()清除一个或多个表面的内容,
结束Direct3D程序
鬼火游戏引擎剖析
抽丝剥茧的关键----线头 irrlicht.h
纵观irrlicht.h ,建立了一个域名irr , 包含了其他5个空间域名:
core 容器类和数学库
gui 二维GUI控件
io
scene 三维场景绘制和管理
video 图片纹理的载入和管理
声明了一个重要的引擎设备函数:
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运算中用于矩阵各种转换操作。