DirectX 函数归纳总结1

来源:互联网 发布:特产店淘宝店名字大全 编辑:程序博客网 时间:2024/05/17 06:50
 DDiirreeccttXX目录

1.D3D基本框架.1

  创建D3D对象..... 2

  获取显卡显示模式.. 2

  创建D3D设备接口..2

  开始渲染和结束渲染.2

  清空图形绘制区.... 2

  屏幕反转... 2

2.绘制基本图形.1

 绘制基本图形 ....4

 灵活定点格式(FVF) 2
 基本图元的绘制.....2
 创建顶点缓冲区.....2

 基本图元的绘制.....2

 保存顶点....2

 设置渲染状态.2

 图形绘制....2

 索引缓冲. 4

 顶点设置. 2

 创建索引缓冲区... 2

 保存顶点索引值... 2

 索引图形绘制.....2

 D3D中的图形学... 4

 D3D中的向量.....2

 D3D中的矩阵.....2

 D3D中的平面.....2

                                      2

----------------------- Page 3-----------------------

D3D中的射线..... 2

D3D中的图形变换...2

3.纹理  4

 从磁盘文件获取纹理..2
 设置当前要渲染的纹理2

 设置纹理的渲染状态. 2

 设置纹理采样属性.. 2

 从一张纹理图形中生成多级纹理.2

 包装纹理寻址.2
 镜像纹理寻址.2
 夹取纹理寻址.2
 边框颜色纹理寻址... 2
 一次镜像纹理寻址... 2
 纹理包装....2

4.光照.4

 D3D光照的基本实现.4

 顶点格式. 2

 设置物体材质.....2

 添加光源. 2

 激活光照运算.....2

5.摄像机 .....4

 生成视图变换矩阵... 2
 生成投影变换矩阵... 2

6.模型基础... 4

 ID3DXMesh接口基础.2
 ID3DXMesh接口相关.2
 应用.X文件..2

7.游戏中的基本特效 .. 4

                                      3

----------------------- Page 4-----------------------

检查硬件支持的深度缓冲区格式.2

激活深度测试.....2

设置深度缓冲区更新.2

设置深度测试函数.. 2

激活Alpha混合...2

设置Alpha混合计算方式....2

设置Alpha混合系数 2

激活Alpha测试...2

设置Alpha测试参考值.....2

设置Alpha测试函数 2

多边形填充模式... 2

查询设备是否支持多重采样... 2

启用多重采样的全景图形反锯齿.2

设置多纹理混合方式.2

激活雾化. 2

设置雾化计算方式.. 2

设置雾的颜色.....2

设置雾的起始范围.. 2

指数雾化浓度.....2

基于发散的雾化... 2

创建2D字体.....2

绘制字体. 2

                                      4

----------------------- Page 5-----------------------

创建3D文字网格... 2

8.                                                   ... 4
88..游戏控制  44

... DirectInput实现键盘控制
.
                            2

... DirectInput实现鼠标控制
.
                            2

.鼠标键选
..
                            2

9.游戏音乐音效.4

                                              5

----------------------- Page 6-----------------------

                          D3D
                          DD33DD基本框架

    D3D
创建DD33DD对象:
Direct3DCreate9(D3D_SDK_VERSION)
=================================================================
==============
                                   DirectX
=================================================================
==============

获取显卡显示模式:
HRESULT GetAdapterDisplayMode(

               UINT    Adapter,        //指定显示卡序列号
    D3DDISPLAYMODE  *pMode          //存储显示模式的指针
                            );
=================================================================
==============
                                   DirectX
=================================================================
==============

    D3D
创建DD33DD 设备接口:
HRESULT CreateDevice(

                      UINT     Adapter,             //显卡序列号
             D3DDEVTYPE       DeviceType,           //D3D设备类型
                     HWND     hFocusWindow,                 //所属窗口句柄
                    DWORD      BehaviorFlags,               //设备进行3D运算
方式
D3DPRESENT_PARAMETERS        *pPresentationParameters,  //用于存储D3D设
                                                     备相关信息的指针
          IDirect3DDevice9 **        ppReturnedDeviceInterface  //返回
                                                     D3D设备接口指针的地址
);

第二个参数DeviceType取值:
D3DDEVTYPE_HAL                    //硬件抽象层,通过显示硬件来完成图形渲染工作
D3DDEVTYPE_REF                        //参考光栅器,一般用于测试显卡不支持的
D3D功能
D3DDEVTYPE_SW                     //用于支持第三方软件
第四个参数BehaviorFlags取值:
D3DCREATE_SOFTWARE_VERTEXPROCESSING          //由D3D软件进行顶点运算(常用)

D3DCREATE_FPU_PRESERVE                      //激活双精度浮点运算或浮点运算异常
                                            检测,设置该项会降低系统性能
D3DCREATE_MULTITHREADED                    //保证D3D是多线程安全的,设置该项
                                          会降低系统性能

                                       6

----------------------- Page 7-----------------------

D3DCREATE_MIXED_VERTEXPROCESSING            //由混合方式进行顶点运算
D3DCREATE_HARDWARE_VERTEXPROCESSING         //由D3D硬件进行顶点运算
D3DCREATE_PUREDEVICE                        //禁用D3D的Get*()函数,禁止D3D
                                               使用虚拟设备模拟顶点运算
=================================================================
==============
                                   DirectX
=================================================================
==============

开始渲染和结束渲染:
BeginScene();                                  //开始渲染
                        ……
                   实际的渲染工作
                        ……
EndScene();                                    //结束渲染
注意:
    这两个函数必须成对出现,不允许交错和嵌套的发生,实际的渲染工作在这两个函数的
中间进行。
=================================================================
==============
                                   DirectX
=================================================================
==============

清空图形绘制区:
HRESULT Clear(

           DWORD     Count,            //清除的矩形区域数量
     const D3DRECT     *pRects,            //清除的矩形区域数组指针
           DWORD     Flags,                //清除的缓冲区标志,指定清除哪一个缓
冲区
        D3DCOLOR     Color,                //清除后重置的颜色
             float       Z,                //清除后重置的深度值,从0-1.0
           DWORD     Stencil               //重置的模板值
);

第三个参数Flags取值(可任意组合):
D3DCLEAR_STENCIL                //模板缓冲区
D3DCLEAR_TARGET                    //颜色缓冲区
D3DCLEAR_ZBUFFER                //深度缓冲区
=================================================================
==============
                                   DirectX
=================================================================
==============

屏幕反转:

                                      7

----------------------- Page 8-----------------------

HRESULT Present(

        CONST RECT       *pSourceRect,            //复制源的矩形区域指针
        CONST RECT       *pDestRect,                //复制目的地的矩形区域指针
             HWND      hDestWindowOverride, //D3D设备窗口句柄
 CONST RGNDATA        *pDirtyRegion                 //最小更新区域指针
);

注意:
    除非D3D的交换链是用D3DSWAPEFFECT_COPY的标志创建,在大多数的情况下,此
函数的各个参数都设置为NULL。
=================================================================
==============
                                   DirectX
=================================================================
==============

                           绘制基本图形

              FVF
灵活定点格式(FFVVFF)

D3D定义的FVF格式:

D3DFVF_XYZ                      //包含未经变换的顶点坐标
D3DFVF_XYZRHW                   //包含经过变换的顶点坐标
D3DFVF_XYZW                     //包含经过变换和裁剪的顶点坐标
D3DFVF_NORMAL                   //包含法线信息
D3DFVF_PSIZE                       //点精灵的大小
D3DFVF_DIFFUSE                     //包含漫反射的颜色信息
D3DFVF_SPECULAR                    //包含镜面反射的颜色信息
D3DFVF_TEX0……D3DFVF_TEX8           //包含0-8个纹理坐标信息
D3DFVF_XYZB1……D3DFVF_XYZB5         //包含顶点位置信息和影响顶点变换的权重信
                                 息,用于骨骼动画模型中
    根据D3D提供的灵活顶点格式,就可以定义自己的顶点结构体,例如,定义一个包含
经过变换的坐标信息和漫反射颜色信息的顶点结构如下:
//创建顶点对象

LPDIRECT3DVERTEXBUFFER9g_pVB  = NULL;     //顶点缓冲区对象

//自定义顶点格式
struct  CUSTOMVERTEX
{

            FLOAT  x,y,z,rhw;          //经过变换的三维坐标
            DWORD  color;       //顶点漫反射颜色
};
#define D3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW| D3DFVF_DIFFUSE)

//以下函数设置顶点数据

    CUSTOMVERTEXvertices[]=

    {

                                      8

----------------------- Page 9-----------------------

        { 100.0f,400.0f,0.5f,1.0f,0xffff0000,},

       { 300.0f, 50.0f,0.5f,1.0f,0xff00ff00,},

       { 500.0f,400.0f,0.5f,1.0f,0xff0000ff,},

    };
=================================================================
==============
                                   DirectX
=================================================================
==============

基本图元的绘制
HRESULT
(

        D3DPRIMITIVETYPE  PrimitiveType,            //基本图元类型
                   UINT  StartVertex,               //起始顶点
                   UINT  PrimitiveCount                     //绘制图元的数量
);

第一个参数PrimitiveType取值:
     D3DPT_POINTLIST              //点列集合(一组点的集合)
     D3DPT_LINELIST               //线列集合(一组线段的集合)
     D3DPT_LINESTRIP              //线带集合(首尾相连的线段的集合)
  D3DPT_TRIANGLELIST              //三角形列(一组三角形的集合)
   D3DPT_TRIANGLESTRIP            //三角形带 (首尾相连的三角形,有两个顶点重
合)
     D3DPT_TRIANGLEFAN                     //三角形扇(组成扇形的一组三角形)
=================================================================
==============
                                   DirectX
=================================================================
==============

创建顶点缓冲区

HRESULT CreateVertexBuffer(

    UINT Length,                                //顶点缓冲区的大小,按字节数算

    DWORD Usage,                                //顶点缓冲区属性

    DWORD FVF,                                  //灵活顶点格式

    D3DPOOL Pool,                               //顶点缓冲区的内存类型

    IDirect3DVertexBuffer9** ppVertexBuffer,   //顶点缓冲区指针地址

    HANDLE* pSharedHandle                      //保留参数,置为0

);

*Usage:参数Usage用于指定顶点缓冲区的属性,其取值可以设为0,或下面任意值的组合。

D3DUSAGE_WRITEONLY       //只写属性,不能进行读操作,设置该属性可以提高系统性能
D3DUSAGE_DYNAMIC        //指定顶点缓冲区要求使用动态内存
D3DUSAGE_NPATCHES        //使用顶点缓冲区绘制N-patches曲线
D3DUSAGE_POINTS          //指定顶点缓冲区存储原始点
D3DUSAGE_RTPATCHES       //使用顶点缓冲区绘制高阶图元(high-orderprimitive)

                                      9

----------------------- Page 10-----------------------

D3DUSAGE_SOFTWAREPROCESSING  //使用软件进行顶点运算,否则使用硬件计算

*Pool:参数Pool属于枚举类型D3DPOOL,指定顶点缓冲区资源的内存位置,如下:
typedef enum _D3DPOOL {

     D3DPOOL_DEFAULT = 0,          //
     DD33DDPPOOOOLL__DDEEFFAAUULLTT == 00,, ////默认值,顶点缓冲区尽可能存在于显存中

     D3DPOOL_MANAGED = 1,                  //   D3D
     DD33DDPPOOOOLL__MMAANNAAGGEEDD == 11,, ////由DD33DD的资源管理器自动调度顶点缓冲

区内存位置

     D3DPOOL_SYSTEMMEM = 2,       //顶点缓冲区位于内存中

     D3DPOOL_SCRATCH = 3, //定点缓冲区位于计算机临时内存中,只能进行内存加锁拷贝

     D3DPOOL_FORCE_DWORD = 0x7fffffff      //强制将此ENUM编译为32位,无其他意


} D3DPOOL;

下面的函数创建了一个顶点缓冲区来保存一个三角形的顶点信息:

//创建顶点缓冲

if(FAILED(g_pDevice->CreateVertexBuffer(

                                      UINT Length:3*sizeof(CUSTOMVERTEX),

                                      DWORD Usage:D3DUSAGE_WRITEONLY,

                                      DWORD FVF  :D3DFVF_CUSTOMVERTEX,

                                      D3DPOOL Pool:D3DPOOL_DEFAULT,

                                     ppVertexBuffer:& g_pVB,

                                      pSharedHandle:NULL)))

{

    returnE_FAIL;

}
=================================================================
==============
                                   DirectX
=================================================================
==============

保存顶点
HRESULT Lock(

     UINT OffsetToLock,                    //加锁内存起始地址

     UINT SizeToLock,             //加锁内存大小

     VOID **ppbData,         //返回内存指针地址

     DWORD Flags       //加锁属性
);

 DWORD Flags
 DDWWOORRDD FFllaaggss:指定了顶点缓冲区的加锁属性,它可以取值为0,或者如下中的任意组合:

D3DLOCK_DISCARD              //仅在动态缓冲区下使用,硬件丢弃原缓冲区并创建一个
                             新的缓冲区
D3DLOCK_NO_DIRTY_UPDATE  //在缺省状态下,对缓冲区加锁将会在该区域设置一个
                             Dirty标志,该属性将不对该区域设置Dirty标志
D3DLOCK_NOSYSLOCK            //在加锁的过程中系统可进行其他操作
D3DLOCK_READONL              //设置缓冲区位制度属性
D3DLOCK_NOOVERWRITE         //尽在动态缓冲区下使用,保证不覆盖缓冲区数据,即向

                                      10

----------------------- Page 11-----------------------

                             缓冲区中添加数据,允许在渲染时添加数据到缓冲区
//以下代码保存了顶点

//锁定顶点缓冲

 if(FAILED(g_pVertexBuffer->Lock(0,sizeof(Vertices))))

{

  return E_FAIL;

}

//拷贝顶点信息

memcpy(g_pVB, vertices,size(vertices));

//解锁

g_pVertexBuffer->Unlock();

=================================================================
==============
                                   DirectX
=================================================================
==============

设置渲染状态
HRESULT SetRenderState(

     D3DRENDERSTATETYPE State,              //需要渲染的状态

     DWORD Value                  //代表设置的渲染状态的值
);

=================================================================
==============
                                   DirectX
=================================================================
==============

图形绘制

*设置资源流
HRESULT SetStreamSource(

     UINT StreamNumber,           //渲染数据流序号

     IDirect3DVertexBuffer9 *pStreamData,  //进行绑定的顶点缓冲区指针

     UINT OffsetInBytes,                            //进行绑定连接的渲染数据流

的起始位置

     UINT Stride                  //渲染数据流中一个顶点所占的内存的大小
);

*设置顶点格式
HRESULT SetFVF(

     DWORD FVF                    //灵活顶点格式
);

*绘制基本图元
HRESULT DrawPrimitive(

     D3DPRIMITIVETYPE PrimitiveType,        //绘制的图元类型

                                      11

----------------------- Page 12-----------------------

     UINT StartVertex,                      //绘制的起始顶点

     UINT PrimitiveCount                    //绘制的图元数量
);

// Desc:渲染图形
VOID Render()

{

//清空后台缓冲区
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,

255, 255), 1.0f, 0 );

//开始在后台缓冲区绘制图形
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )

    {

        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0,

sizeof(CUSTOMVERTEX) );

        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

        g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); //画

一个三角形

        g_pd3dDevice->EndScene();//结束在后台缓冲区绘制图形
    }

    g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); //将在后台缓冲区绘

                                              制的图形提交到前台缓冲区显示
    }

=================================================================
==============
                                   DirectX
=================================================================
==============

                              索引缓冲

顶点设置

//下面代码片段设置了索引缓冲的值

//-----------------------------------------------------------------------------

// Desc:全局变量

//-----------------------------------------------------------------------------

LPDIRECT3DVERTEXBUFFER9g_pVB       =NULL;// 顶点缓冲区对象

LPDIRECT3DINDEXBUFFER9 g_pIB     =NULL;// 索引缓冲区对象

//-----------------------------------------------------------------------------

// Desc:顶点结构和灵活顶点格式

//-----------------------------------------------------------------------------

structCUSTOMVERTEX

{  FLOATx, y, z, rhw;       // 经过坐标转换的顶点位置

    DWORDcolor;                 // 顶点漫反射颜色值

};

#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

原创粉丝点击