Matrix packing order for uniform parameters is set to column-major by default. This means each column of the matrix is stored in a single constant register.
--dx sdk原文,很明白,默认你的app矩阵的一列将占用一个寄存器,但有个前提条件,就是你使用ID3DXConstantTable::SetMatrix或者这个ID3DXBaseEffect::SetMatrix接口进行矩阵设置,这个row major和column major只影响sdk提供的setmatrix接口提供参数的解析形式。如果你使用IDirect3DDevice9::SetVertexShaderConstantF进行矩阵设置,结果就是上面英文写的对此完全没有影响。理解了不?
再说明白点,在shader代码中,完全没有行矩阵,列矩阵区分,在shader代码中matrix只是个n×m的数据块,对于矩阵的行列区分完全自动转换,看这个
mul (DirectX HLSL)
Multiplies x and y using matrix math. The inner dimension x-columns and y-rows must be equal.
Parameters
- x
-
[in] The x input value. If x is a vector, it treated as a row vector.
- y
-
[in] The y input value. If y is a vector, it treated as a column vector.
也就是说,在shader中矩阵就是看到float4x3的矩阵,你并不能确定它占几个常量寄存器,也许是3个,也许是4个,但它一定是4行3列,根据线性代数原则,可以左乘一个3×n的向量,这时矩阵就是行矩阵,如果它右乘一个n×4的向量,则矩阵自动理解为列矩阵,这个n×4的向量时行向量。
- 应该讲清楚了。
posted on 2007-11-09 10:28
Sherk 阅读(834)
评论(0) 编辑 收藏 引用