寒江雪 Direct3DX11索引快取

2021-07-25 16:40:49 字數 1624 閱讀 5551

在direct3d11中,因為要模擬乙個圖形,一般我們以三角形作為圖元,但是僅僅使用頂點快取會造成很多重複的點,為了避免這種重複引入了索引快取的概念.把頂點快取和索引快取配合使用,對於大型物體來說,極大地節省了空間.這是很好的一件事情.引用淺墨對這二者的比喻,它們就好像鍾子期和俞伯牙一般,只有二者在一起,高山流水才顯得有意義.

那麼在direct3d11中使用索引快取的方法是怎樣的呢?其實在direct3d11中要建立索引快取和建立頂點快取非常類似.一般步驟如下:

void iasetindexbuffer(

[in, optional] id3d11buffer *pindexbuffer,

[in] dxgi_format format,

[in] uint offset

);

id3d11buffer *pindexbuffer:顯然就是我們之前建立好的索引快取了

dxgi_format format:設定資料格式,這取決於我們定義的索引陣列所使用的資料型別.如果是16-bit 的資料型別,使用dxgi_format_r16_uint. (dxgi_format_r16_uint).如果是32-bit 的資料型別則使用dxgi_format_r32_uint.

uint offset:表示從快取的起點到第乙個要使用的元素的偏移量

由於與頂點快取非常類似.就直接貼乙份樣例**,完整的示例**將在effect基本概述的文章中出現.

d3d11_buffer_desc bd;

//設定索引陣列

//注意:陣列裡的每乙個數字表示頂點陣列的對應下標的頂點。

// 由於立方體由12個三角形組成,所以共需要36個頂點

// 這裡每3數字構成乙個三角形

word indices =

;uint indexcount = arraysize(indices);

//建立索引快取

bd.usage = d3d11_usage_default;

bd.bytewidth = sizeof(word) * indexcount;

bd.bindflags = d3d11_bind_index_buffer;//注意:這裡表示建立的是索引快取

bd.cpuaccessflags = 0;

initdata.psysmem = indices;//設定需要初始化的資料,即索引陣列

id3d11buffer *indexbuffer;//宣告乙個id3d11buffer物件作為索引快取

//呼叫createbuffer建立索引快取

hr = g_pd3ddevice->createbuffer(&bd, &initdata, &indexbuffer);

if (failed(hr))

//設定索引快取

g_pimmediatecontext->iasetindexbuffer(indexbuffer, dxgi_format_r16_uint, 0);

需要特別說明的是,這段**僅僅是展示了如何建立並設定索引快取.具體實戰的時候,索引快取需要和頂點快取一起建立和使用.這裡為了縮短篇幅,省略了頂點快取.

date:2016.12.29

Direct3D入門 一 配置Direct3D環境

b url 先鋒隊 北京貝武易科技公司 b 我們要編寫directx direct3d 程式,需要先安裝兩個檔案 directx sdk directx開發包 這個開發包大,大概500兆 url 執行環境 這個檔案小,大概30 40兆 url 很多初學者會混淆了這個兩個directx有什麼區別。乙個...

Direct3D 多重取樣抗鋸齒

多重取樣抗鋸齒 multisampling atialiasing 針對光柵化顯示器抗鋸齒的方法有多種,在d3d中採用的多重取樣方法。即在每個畫素點內部,設定多個取樣點,繪製多邊形邊緣時,針對每個取樣點判斷是否被多邊形覆蓋,最終的顏色值從取樣點中取均值,以對多邊形的邊緣進行 模糊化 從而減輕鋸齒效果...

Direct3D中的霧化效果

在direct3d 中,霧化是通過將景物顏色與霧的顏色,以隨物體到觀察點距離增加而衰減的混合因子混合而實現的。兩種霧化方法 頂點霧化和畫素霧化。三種霧化公式 線性霧化,指數霧化,指數平方霧化。兩種霧化處理 基於深度的霧化處理和基於範圍的霧化處理。基於深度是指兩個點之間的深度 z 差值,基於範圍則是兩...