1.深度測試
a)深度緩衝區:螢幕上每個畫素點的深度資訊的一塊記憶體緩衝區.d3d通過比較當前繪製的畫素點的深度和對應深度緩衝區的點的深度值來決定是否繪製當前畫素.
b)d3dpresent_parameters. autodepthstencilformat =
d3dfmt_d16
表示深度值由16位二進位制表示
開啟深度測試:pdevice->setrenderstate(
d3drs_zenable, true );
深度測試函式:d3drs_zfunc:
d3dcmp_never
總是返回
false
d3dcmp_less (常用)
小於深度緩衝區的相應值時返回
true
d3dcmp_equal 等於
d3dcmp_lessequal
小於等於
d3dcmp_greater 大於
d3dcmp_notequal
不等於d3dcmp_greaterequal
大於等於
d3dcmp_always
總是返回
true
更新緩衝區:保持深度緩衝區不變還是用當前畫素的深度值更新
pdevice->setrenderstate(
d3drs_zwriteenable, true );
2.alpha混合
a)原理:color = (rgb
src * k
src) op (rgb
dst * k
dst)
最常用的方法:color = (rgb
src * alpha
src) + (rgb
dst * (1 – alpha
src)
b)應用
啟用:pdevice->setrenderstate( d3drs_alphablendenable, true );
blend mode factor
description
d3dblend_zero
(0, 0, 0, 0)
d3dblend_one
(1, 1, 1, 1)
d3dblend_srccolor
(rs, gs, bs, as)
d3dblend_invsrccolor
(1-rs, 1-gs, 1-bs, 1-as)
d3dblend_srcalpha
(as, as, as, as)
d3dblend_invsrcalpha
(1-as, 1-as, 1-as, 1-as)
d3dblend_destalpha
(ad, ad, ad, ad)
d3dblend_invdestalpha
(1-ad, 1-ad, 1-ad, 1-ad)
d3dblend_destcolor
(rd, gd, bd, ad)
d3dblend_invdestcolor
(1-rd, 1-gd, 1-bd, 1-ad)
d3dblend_srcalphasat
(f, f, f, 1); f = min(as, 1-ad)
alpha混合方法
d3dblendop_add
源計算結果與顏色緩衝區計算結果相加
d3dblendop_subtract
源計算結果減去顏色緩衝區計算結果
d3dblendop_revsubtract
顏色緩衝區計算結果減去源計算結果
d3dblendop_min
min(源計算結果, 顏色緩衝區計算結果)
d3dblendop_max
max(源計算結果, 顏色緩衝區計算結果)
color = (rgb
src * alpha
src) + (rgb
dst * (1 – alpha
src) )的設定示例:
pdevice->setrenderstate(
d3drs_srcblend, d3dblend_srcalpha );
pdevice->setrenderstate(
d3drs_destblend, d3dblend_invsrcalpha );
pdevice->
setrenderstate( d3dblendop, d3dblendop_add );(預設值,可選)
3.alpha測試
a)原理
根據alpha測試條件來決定當前畫素是否繪製,並不需要對顏色緩衝進行操作,所以速度比alpha混合要快.
b)應用
啟用:pdevice->setrenderstate(
d3drs_alphatestenable, true );
alpha測試函式
d3dcmp_func列舉,預設為d3dcmp_always
參考值:
pdevice->setrenderstate(
d3drs_alpharef, 0x00000081);
D3D深度測試和Alpha混合
1.深度測試 a 深度緩衝區 螢幕上每個畫素點的深度資訊的一塊記憶體緩衝區.d3d通過比較當前繪製的畫素點的深度和對應深度緩衝區的點的深度值來決定是否繪製當前畫素.b d3dpresent parameters.autodepthstencilformat d3dfmt d16 表示深度值由16位二...
D3D渲染效能測試
測試條件 一張 nvidia 1030顯示卡 1個顯示器 30fps,4k 渲染1個4k畫面 gpu 60 fps 45 渲染2個4k畫面 gpu 50 fps 30 渲染3個4k畫面 gpu 57 fps 30 渲染4個4k畫面 gpu 62 fps 30 測試條件 一張 nvidia 1030顯...
D3D基本框架 即D3D標頭檔案分類
了dxut的結構 後,發現微軟程式設計師的編碼風格太深奧了。各種巨集定義 預編譯跳得頭暈,由於對於window api的不精通,導致寫出符合dxut風格的框架以現在的水平來看是不可能的。既然沒有弄通dxut,我也暫時不想套用了,那麼還是先自己用自己的框架來寫把。框架如下 雖然沒學會dxut,但是微軟...