D3D笔记:在Direct3D画画

 顶点索引缓冲区:

一个顶点缓冲区是一个连续的存储了顶点数据的内存。IDirect3DVertexBuff9.

一个索引缓冲区是一个连续的存储了索引数据的内存。IDirect3DIndexBuff9.

 

创建顶点索引缓冲区:

HRESULT IDirect3DDevice9::CreateVertexBuffer(

    UINT Length,   //分配的缓冲区字节大小,顶点个数×Sizeof(vertex)

    DWORD Usage,  //怎么使用缓冲区信息,   

                             //D3DUSAGE_DYNAMIC,D3DUSAGE_POINTS,

                             //D3DUSAGE_SOFTWAREPROCESING,D3DUSAGE_WRITEONLY

    DWORD FVF,        // 存储在缓冲区的顶点格式

    D3DPOOL Pool,     //缓冲区放置在那个内存池

    IDirect3DVertexBuffer9** ppVertexBuffer,  //创建好的缓冲区指针

    HANDLE* pSharedHanlder   //没有使用设置为0

);

 

HRESULT IDirect3DDevice9::CreateIndexBuffer(

   UINT Length,

   DWORD Usage,

   D3DFORMAT format,    //指定索引大小,D3DFMT_INDEX16

   D3DPOOL pool,

   IDirect3DIndexBuffer9** ppIndexBuffer,

   HANDLE* pSharedHanlder

)

 

 

访问缓冲区内存:我们通过指针访问缓冲区数据必须使用Lock方法,使用完必须对其解锁。

HRESULT IDirect3DVertexBuffer9::Lock(

   UINT OffsetToLock,  //偏移量,以字节为单位。

   UINT SizeToLock,     //锁定字节数

   BYTE** ppbData,     //指定锁定内存开始位置指针

   DWORD Flags            //怎么描述锁定内存,    

                                  //D3DLOCK_DISCARD,D3DLOCK_NOOVERWRITE,D3DLOCK_READONLY

)

HRESULT IDirect3DIndexBuffer9::Lock(

      UINT OffsetToLock,

   UINT SizeToLock,

   BYTE** ppbData,

   DWORD Flags

)

 

找回索引及索引缓冲区信息.

D3DVERTEXBUFFER_DESC vbDescription.

IDirect3DVertexBuffer9->GetDesc(&vbDescription)

D3DINDEXBUFFER_DESC ibDescription.

IDirect3DIndexBuffer9->GetDesc(&ibDescription)

 

typedef struct _D3DVertexBuffer_Desc{

   D3DFORMAT Format,

   D3DRESOURCETYPE Type,

   DWORD Usage,

   D3DPOOL Pool,

   UINT Size,

   DWORD FVF

)D3DVERTEXBUFFER_DESC

 

typedef struct _D3DIndexBuffer_Desc{

   D3DFORMAT Format,

   D3DRESOURCETYPE Type,

   DWORD Usage,

   D3DPOOL Pool,

   UINT Size,

)D3DINDEXBUFFER_DESC

 

渲染状态:设置渲染状态 IDirect3DDevice::SetRenderState(

D3DRENDERSTATETYPE type,

DWORD Value)

 

绘制准备:

1、设置资源流:

HRESULT IDirect3DDevice::SetStreamSource(

    UINT SourceNumber,   //顶点与那个缓冲区挂钩

    IDirect3DVertexBuffer9** vertexBuffer,   //缓冲区指针

    UINT OfferSetInBytes,   //相对流开始处的偏移量

    UINT Stride  //操作的每一部分流的大小 sizeof(vertex)

)

2、设置顶点格式:

IDirect3DDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)

3、设置索引缓冲区:

IDirect3DDevice->SetIndices(_ib)

3、用顶点缓冲区绘制

HRESULT IDirect3DDevice->DrawPrimitive(

      D3DPRIMITIVETYPE primitiveType, //用来绘制的图元类型 D3DPT_TRIANGLELIST

      UINT StartVertex,    //索引在流中的一个元素

      UINT PrimitiveCount  //绘制图元个数

)

 

HRESULT IDirect3DDevice->DrawIndexedPrimitive(

     D3DPRIMITIVETYPE Type,   //绘制的图元类型 D3DPT_TRIANGLELIST

     INT BaseVertexIndex,   //一个基本数字,调用中用它来加索引

     UIN MinIndex,       //将被引用的最小索引值

     UIN NumVertices,   //在此调用中被引用的索引数

     UIN StartIndex,     //索引到索引缓冲的某个位置

     UIN PrimitiveCount //绘制的图元个数

)

 

开始结束场景:

IDirect3DDevice->BeginScene();

IDirect3DDevice->DrawPrimitive(...);

IDirect3DDevice->EndScene();

 

D3DX几何物体:

D3DXCreateBox, D3DXCreateSphere,D3DXCreateCylinder

 

IDirectMesh

HRESULT D3DXCreateTeapot(

    LPDIRECT3DDEVICE9 pDevice,

    LPD3DXMESH** ppMesh,

    LPD3DXBUFFER* ppAdjacency

)

 

mesh->DrawSubset();

 

 

绘制实例过程:

1、创建两个全局变量保存立方体的顶点和索引数据。

2、设置屏幕大小的全局变量。

3、设置顶点结构。

4、Setup过程:创建顶点缓冲区,创建索引缓冲区。

5、锁定顶点缓冲区,设置顶点。

6、锁定索引缓冲区,设置索引。

7、放置摄像机,设置View。

8、设置投影模式。

9、设置RanderState

10、Display过程:设置旋转角度模式,在世界模式下。

11、清除Scence.

12、绘制准备,设置顶点关联流。

13、设置索引关联流。

14、设置FVF格式。

15、绘制索引缓冲区。

16、呈现。

17、释放资源

你可能感兴趣的:(struct,存储,byte,Direct3D)