2014-03-31 59 views
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 *矩陣。

回答

0

HLSL使用Column-Major,而XNAMath使用ROW-Major。在將其提供給HLSL Shader之前,應對其進行轉置。兩天前我也很困惑。