Direct3D(一)

創建頂點/緩存縮索引

HRESULT IDirect3DDevice9::CreateVertexBuffer(

UINT Length,

DWORD Usage,

DWORD FVF,

D3DPOOL Pool

IDirect3DVertexBuffer9** ppVertexBuffer,

HANDLE* pSharedHandle

);

 

HRESULT IDirect3DDevice9::CreateIndexBuffer(

UINT Length,

 

DWORD Usage,

D3DFORMAT Format,

D3DPOOL Pool,

IDirect3DIndexBuffer9** ppIndexBuffer,

HANDLE* pSharedHandle

);

 

 

Length —— 分配給緩存的字節大小。假如想得到一個能存儲8個頂點的頂點緩存,那麼我們就要在頂點結構中設置這個參數爲 8 * sizeof ( Vertex ) 。

Usage —— 指定關於怎樣使用緩存的額外信息。這個值可以是0,沒有標記,或者是下面標記的一個或多個的組合:

     nD3DUSAGE_DYNAMIC——設置這個參數可以使緩存是動態的。在下一頁說明靜態和動態緩存。

     nD3DUSAGE_POINTS——這個參數指定緩存存儲原始點。原始點將在第14章粒子系統中介紹。這個參數僅僅用在頂點緩衝中。

     nD3DUSAGE_SOFTWAREPROCESSING——使用軟件頂點處理

     nD3DUSAGE_WRITEONLY——指定應用程序只能寫緩存。它允許驅動程序分配最適合的內存地址作爲寫緩存。注意如果從創建好的這種緩存中讀數據,將會返回錯誤信息。

FVF —— 存儲在緩存中的頂點格式

Pool —— 緩存放置在哪一個內存池中

ppVertexBuffer ——返回創建好的頂點緩存的指針。

pSharedHandle ——沒有使用;設置爲0。

Format ——指定索引的大小;使用D3DFMT_INDEX16設置16位索引,使用D3DFMT_INDEX32設置32位索引。注意並非所有設備都支持32位索引;請檢查設備能力。

ppIndexBuffer ——返回創建好的索引緩存的指針。


 

 

基本圖元:

DrawPrimitive();//繪製頂點緩存的內容

HRESULT IDirect3DDevice9::DrawPrimitive(

D3DPRIMITIVETYPE PrimitiveType,

UINT StartVertex,

UINT PrimitiveCount

);

 

PrimitiveType——我們繪製的圖元類型。比如,我們能繪製點和線以及三角形。以後我們使用三角形,用D3DPT_TRIANGLELIST參數。

D3DPT_POINTLIST 圖元是一些點

D3DPT_LINELIST /_LINESTRIP 圖元是一些離散的線段/連接的線段 

D3DPT_TRIANGLELIST/_TRIANGLESTRIP/_TRANGLEFAN s三角形列,帶,扇

StartVertex——索引到在頂點流中的一個元素。設置渲染頂點中的開始點。這個參數給予我們一定的機動性,可以繪製一個頂點緩存中的某部分。

PrimitiveCount——繪製圖元的個數。

 

// 繪製4個三角形

_device->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 4);

 

DrawIndexPrimitive();//繪製緩存索引的內容

HRESULT IDirect3DDevice9::DrawIndexedPrimitive(

D3DPRIMITIVETYPE Type,

INT BaseVertexIndex,

UINT MinIndex,

UINT NumVertices,

UINT StartIndex,

UINT PrimitiveCount

);

Type——我們繪製的圖元類型。比如,我們能繪製點和線以及三角形。以後我們使用三角形,用D3DPT_TRIANGLELIST參數。

MinIndex——將被引用的最小索引值。

NumVertices——在此調用中將被引用的頂點數。

l PrimitiveCount——繪製圖元的個數。

StartIndex——索引到索引緩存中的某個位置,它標記開始渲染的開始索引點。

BaseVertexIndex——一個基本數字,在調用中用它去加上索引。參看下面的說明。

 

渲染狀態:

HRESULT IDirect3DDevice9::SetRenderState(

D3DRENDERSTATETYPE State, // 更改的渲染狀態

DWORD Value // 新的狀態值

);

_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);//線框模式渲染

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章