posts - 25,  comments - 21,  trackbacks - 0

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.

ret mul(x, y)

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)  编辑 收藏 引用
只有注册用户登录后才能发表评论。
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

留言簿(3)

随笔档案

相册

好友

搜索

  •  

最新评论

阅读排行榜

评论排行榜