Lesson 12 索引快取

2021-07-25 09:51:15 字數 1484 閱讀 6652

單單用頂點快取來繪製圖形的方法在應對複雜圖形的時候非常不科學,顯得複雜而力不從心。

也就是說,當物體模型很複雜、頂點數量很大時,僅使用頂點快取繪製圖形會使重複的頂點大大增加,並且direct3d仍需要對這些重複的頂點進行計算,因此需要更多的儲存空間和更大的開銷。

這時候,我們頂點快取的紅顏知己——索引快取是時候出場了。

索引快取(index buffers),人如其名,它就是乙個索引,用於記錄頂點快取中每乙個頂點的索引位置。

索引快取作為頂點快取的目錄和提綱,能讓頂點快取發揮出內在的潛力,更高效更容易地繪製出乙個3d圖形來。

另外提一點,索引快取能夠加速視訊記憶體中快速訪問頂點資料位置的能力。

頂點快取儲存了物體模型所有的頂點資料,而這些資料可以是唯一的。索引快取儲存了構成物體的頂點在頂點快取的索引值,通過索引查詢對應的頂點,以完成圖形的繪製。

使用頂點快取配合索引快取繪製圖形

用到的是idirect3ddevice9::drawindexedprimitive函式,它的原型如下:

hresult drawindexedprimitive(  

[in] d3dprimitivetype type,

[in] int basevertexindex,

[in] uint minindex,

[in] uint numvertices,

[in] uint startindex,

[in] uint primitivecount

); idirect3ddevice9::drawindexedprimitive函式

第乙個引數,d3dprimitivetype型別的type,這個引數和drawprimitive方法中第乙個引數一摸一樣,表示將要繪製的圖元型別。

第二個引數,int型別的basevertexindex,表示將要進行繪製的索引快取的起始頂點的索引位置。

第三個引數,uint型別的minindex,表示索引陣列中最小的索引值,通常都設為0,這樣我們的索引就是0,1,2,3,4,5這樣往後排的。

第四個引數,uint型別的numvertices,表示我們這次呼叫drawindexedprimitive方法所需要的頂點個數,也就是為多少個頂點做索引,或者說是索引快取中使用的頂點數目。

第五個引數,uint型別的startindex,表示從索引中的第幾個索引處開始繪製我們的圖元,或者說是索引快取區開始讀索引值的起始位置。

第六個引數,uint型別的primitivecount,顯然就是要繪製的圖元個數了。

用乙個圖來說明這個函式:

Python學習筆記Lesson1 2

1.python中的語句不使用分號結尾 2.python中 接受輸入可以用 變數名 input 其中input中可以帶引數,例如name input 請輸入使用者名稱 3.python輸出print 可以用逗號連線輸出字元 也可以用 例如print 歡迎回來,name print 歡迎回來,name...

Lesson 12 物件導向上

物件導向的程式語言,關注的是物件,而不注重過程,對於物件導向一切皆物件 物件導向的程式設計思想,將所有功能統一儲存到對應的物件中,要使用某個功能,直接找到對應的物件即可 這種編碼方式比較容易閱讀,並且易於維護,容易復用。但是編寫的過程中不太符合常規的思維,編寫相對麻煩 語法 class 類名 父類 ...

NeHe教程Qt實現 lesson12

nehe 系列教程之十二 顯示列表 本課主要演示了顯示列表的使用。基於第六課。顯示列表的主要介面 glgenlists glnewlist glcalllist 具體來看 中的使用 namespace static glfloat topcol 5 3 array for top colors gl...