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 *矩阵。