0
我意識到,在d3dx數學庫或xnamath庫,矩陣被保存在內存行主要。 在效果框架中,當我們通過效果接口setvarible設置矩陣參數時,它將轉置目標矩陣。如果我沒有使用效果框架,我必須設置由SetVertexConstantF着色器參數...混淆與行主要和列主要矩陣乘法在hlsl
但是當我使用效果框架,我必須在此代碼轉換頂點:在正常着色器代碼
OutPosition = mul(InPosition, mViewProj);
無效果框架,我必須使用:
OutPosition = mul(mViewProj, InPosition);
如果我改變這個順序,它會工作不正確。
我發現了一些文章,他們推薦hlsl存儲矩陣作爲專欄。 如果這是真的,我想我必須使用乘預矩陣:
OutPosition = mul(mViewProj, InPosition);
但是當我調試這個在PIX或nsight,我發現marix參數是寄存器存儲,因爲它在內存中,例如:如果 是mViewProj:
x0 y0 z0 w0
x1 y1 z1 w1
x2 y2 z2 w2
x3 y3 z3 w3
在頂點着色器寄存器
:
c0:x0 y0 z0 w0
c1:x1 y1 z1 w1
c2:x2 y2 z2 w2
c3:x3 y3 z3 w3
它看起來像店作爲主要行。爲什麼?
這是與矩陣乘法的基本規則衝突: 列主要:矩陣* vec 行主要:vec *矩陣。