渲染管線指的是通過虛擬相機看到的內容生成2d影象的整個步驟序列,在部落格d3d12渲染技術概述中介紹過渲染管線,本篇部落格具體講解各個模組的作用,先看下圖所示:
上圖中input assembler stage表示的是從儲存器讀取幾何資料(頂點和索引)並使用它來組裝幾何圖元(例如,三角形,線條)。 (簡單地說,它們定義了如何將頂點組合在一起以形成基元。)
void id3d12graphicscommandlist::iasetprimitivetopology(
d3d_primitive_topology topology);
typedef
enum d3d_primitive_topology
d3d_primitive_topology;
所有繪圖呼叫將使用當前設定的基本拓撲,通過命令列表更改拓撲, 以下**說明:
mcommandlist->iasetprimitivetopology(
d3d_primitive_topology_linelist);
/* …draw objects using line list… */
mcommandlist->iasetprimitivetopology(
d3d_primitive_topology_********list);
/* …draw objects using ******** list… */
mcommandlist->iasetprimitivetopology(
d3d_primitive_topology_********strip);
/* …draw objects using ******** strip… */
另外還有point list,line strip,line list,******** strip,******** list等,這些在d3d9中就講解過,這裡就不重複了,再介紹下乙個階段:
for(uint i = 0; i
< numvertices; ++i)
outputvertex[i] = vertexshader( inputvertex[i] );
頂點著色器函式是我們實現的,但它由gpu為每個頂點執行,因此它非常快。
我們可以在頂點著色器中執行許多特殊效果,例如變換,光照和置換貼圖。 請記住,我們不僅可以訪問輸入頂點資料,還可以訪問儲存在gpu記憶體中的紋理和其他資料,例如轉換矩陣和場景燈光。
頂點著色器乙個重要的能力就是處理各種矩陣變換,這個也是乙個老問題了,在我寫的以前部落格中有關於這方面的介紹可程式設計流水線和固定流水線,這裡就不重複了。
以上講解的都是關於d3d12渲染管線的理論知識,我們要搞清楚渲染管線的每個階段負責哪些事情,後面的部落格我們會講解具體如何使用。
D3D12渲染技術之紋理案例
我們現在回顧一下將紋理新增到箱子模型上面,就跟以前的部落格中提到的那樣。下面我們詳細介紹如何實現?geometrygenerator createbox生成箱子的紋理座標,以便將整個紋理影象對映到箱子的每個面上。為簡潔起見,我們僅顯示正面,背面和頂面的頂點定義。另請注意,我們省略了頂點建構函式中法線...
D3D12渲染技術之過濾
紋理貼圖的元素是來自連續影象的離散顏色樣本,它們不是帶有區域的矩形。所以問題是 如果我們的紋理座標 u,v 與其中乙個紋理畫素點不一致,會發生什麼?這可能發生以下情況。假設放大場景中的牆壁,使牆壁覆蓋整個螢幕,例如,假設顯示器解析度為1024 1024,牆壁的紋理解析度為256 256,這說明紋理放...
D3D12渲染技術之在著色器中取樣
我們直奔主題,紋理物件在hlsl中定義,並使用以下語法分配給紋理暫存器 texture2d gdiffusemap register t0 這個換成在unity引擎或者ue4引擎中就是提供的視覺化操作介面,而在dx中的表示是按照上面的寫法,這樣可以通過引擎對其進行賦值操作。請注意,紋理暫存器使用由t...