zoukankan      html  css  js  c++  java
  • 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添加  ..CodeBlocksMinGWin

    运行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)Libx86

    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运算中用于矩阵各种转换操作。

  • 相关阅读:
    查看DNS、IP、Mac等
    windows测试物理网络
    ACCEPT详解
    oracle动静视图-权限-角色-参数
    [ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 二 )
    使用Python爬取网页的相关内容(图片,文字,链接等等)
    使用Python爬取网页的相关内容(图片,文字,链接等等)
    使用Pycharm安装插件时发生错误
    使用Pycharm安装插件时发生错误
    使用Pycharm安装插件时发生错误
  • 原文地址:https://www.cnblogs.com/jackcin/p/3836980.html
Copyright © 2011-2022 走看看