vertex shader是什麼?
頂點著色是一段執行在gpu上的程式(一般用hlsl來編寫),用來取代fixed pipeline中的transformation和lighting,vertex shader主要操作頂點。當然前提是硬體要支援,軟體模擬的不算
有圖則一目了然
vertex shader做了什麼工作
由上圖知,vertex shader對輸入頂點完成了從local space到homogeneous clip space的變換過程,homogeneous clip space即projection space的下乙個space。在這其間共有world transformation, view transformation和projection transformation及lighting幾個過程。
優點(與fix pipeline比較)
由於vertex shader是使用者自定義程式,所以有很大的靈活性,不必再侷限於d3d固定的演算法,可以應用許多其他演算法,比如可以操作頂點位置模擬衣服效果,操作頂點大小模擬例子系統及頂點混合,變形等,此外,頂點的資料結構也更加靈活。
如何檢視顯示卡所支援的vertex shader版本
工具法,看這裡
程式法,**如下
create d3d
2g_pd3d
=direct3dcreate9( d3d_sdk_version ) ;34
//get d3dcaps
5d3dcaps9 d3dcaps9 ;
6g_pd3d
->
getdevicecaps(d3dadapter_default, d3ddevtype_hal,
&d3dcaps9) ;78
//retrieve vertex shader version
9dword version
=d3dcaps9.vertexshaderversion ;
10if
(version
==d3dvs_version(3,
0))11cout
<<
"version is 3.0!
"<<
endl ;12
或者check shader version
2bool
checkshaderversion(lpdirect3ddevice9 g_pd3ddevice)313
14//
make sure pixel shader version greater than 2.0
15if
(caps.pixelshaderversion
<
d3dps_version(2,
0))1619
20return
true;21
};
頂點著色程式
頂點著色程式從gpu前端模組 暫存器 中提取圖元資訊 頂點位置.法向量 紋理座標等 並完成頂點座標空間轉換,法向量空間轉換,光照計算等操作。最後將計算好的資料傳送到指定暫存器中。然後片段著色器從種獲取需要的資料,通常為 紋理座標,光照資訊等 並根據這些資訊以及從應用程式傳遞的紋理資訊進行每個片段的顏...
頂點著色問題應用
1.n個學生對m個宣講會中的若干個感興趣,如何安排宣講會的時間 每個宣講會持續的時間相同 使得每個學生對自己感興趣的宣講會時間不衝突,且宣講會的總時間最短?此問題可以轉化成頂點著色問題。把每個宣講會看作是一些散布的點,對於每個學生,把他感興趣的宣講會之間兩兩相連,如 學生a希望參加宣講會1 2 3 ...
HLSL頂點著色器
1.在文字檔案裡編寫頂點著色器 hlsl語言 2.編譯著色器 d3dxcompileshaderfromfile 3.建立頂點著色器 createvertexshader 4.獲取hlsl語言中變數控制代碼 getconstantbyname 5.根據控制代碼給hlsl語言中的變數傳值 id3dxc...