DirectX9.0 入門手冊(4)

       第一次寫這種文章,再加上自己也是菜鳥,雖然有部分內容是參考一些書籍及自己翻譯一些英文文章所寫出來的,但我相信文章裏面肯定也還有很多bug,如果你發現了請告訴我,或者你有什麼想法也可以和我交流,我誠心和志同道合的人成爲朋友,我的QQ61010818,我的郵箱[email protected]

·D3D中的圖元簡介

       D3D中,一共有三種基本圖元,分別是點、線和三角形。點是最簡單的圖元,由它可以構成一種叫點列(point list)的圖元類型。線是由兩個不重合的點構成的,一些不相連的線組成的集合就叫線列(line list),而一些首尾相連但不形成環路的線的集合就叫線帶(line strips)。同理,單獨的三角形集合就叫三角形列(triangle list),類似於線帶的三角形集合就叫三角形帶(triangle strips),另外,如果多個三角形共用一個頂點作爲它們的一個頂點的話,那麼這個集合就叫三角形扇(triangle fans)。還是畫圖比較容易理解吧:

       這些圖元有什麼用呢?基本上我們可以使用這些圖元來畫我們想要的任何物體。例如畫一個四方形可以使用三角形帶來畫,畫一個圓則使用三角形扇。

       現在介紹一種不需要頂點緩衝來渲染的方法,就是使用IDirect3DDevice9::DrawPrimitiveUP函數。UP就是User Pointer的意思,也即是說要使用用戶定義的內存空間。

 

 

 

       PrimitiveType要繪畫的圖元的種類。就是上面介紹的那六種類型。

PrimitiveCount要繪畫的圖元的數量。假設有n個頂點信息,繪畫的圖元類型是點列的話,那麼圖元的數量就是n;如果繪畫的圖元類型是線列的話,那麼圖元的數量就是n/2;如果是線帶的話就是n-1;三角形列就是n/3;三角形帶就是n-2;三角形扇出是n-2

pVertexStreamZeroData存儲頂點信息的數組指針

VertexStreamZeroStride頂點的大小

·使用頂點緩衝來繪畫圖元

很多時候我們使用頂點來定義圖形之後,就把這些頂點信息放進頂點緩衝裏面,然後再進行渲染。使用點頂緩衝的好處以及如何創建頂點緩衝我已經在上一章已講過了,現在講講怎麼把頂點緩衝裏面的圖元給畫出來。其實也很簡單,和上面的IDirect3DDevice9::DrawPrimitiveUP函數差不多,我們使用IDirect3DDevice9::DrawPrimitive函數。不過在使用這個函數之前,我們得告訴設備我們使用哪個數據源,使用IDirect3DDevice9::SetStreamSource函數可以設定數據源。

 

 

 

       StreamNumber設置和哪個數據流梆定。如果使用單數據流的話,這裏設爲0。最多支持16個數據流。

pStreamData要綁定的數據。也就是我們創建的頂點緩衝區裏面的數據。

OffsetInBytes設置從哪個字節開始讀起。如果要讀整個緩衝區裏面的數據的話,這裏設爲0

Stride單個數據元素的大小。如果數據源是頂點緩衝的話,那麼這裏就是每個頂點信息的大小(Sizeof(vertex))。

設置好數據源後,就可以使用IDirect3DDevice9::DrawPrimitive來繪畫了。

 

 

 

PrimitiveType要繪畫的圖元的種類。

StarVertex 設置從頂點緩衝區中的第幾個頂點畫起。沒有特殊情況當然是想把全部的頂點畫出來啦,所以一般這裏設置從0開始。

PrimitiveCount要繪畫的圖元的數量。

 

 

 

好了,這章比較簡單。寫到這章的時候我才發現這不是入門手冊,有一些重要但是我覺得沒必要講的東西我都沒有講明。如果是新手看我寫的這些東西,搞不好還會被我迷惑了,呵呵。所以還是建議大家看DXSDK裏面的說明文檔,雖然是英文的,但是很詳細,我現在都還沒有看完呢。

       嗯,前面四章把最基本的東西講完了,使用前面的知識我們可以畫一些簡單的靜止圖形。下一章就開始講矩陣了,它可以使我們的圖形動起來。

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