posts - 25,  comments - 21,  trackbacks - 0
先看dx sdk原文,

The data in a matrix is loaded into shader constant registers before a shader runs. There are two choices for how the matrix data is read: in row-major order or in column-major order. Column-major order means that each matrix column will be stored in a single constant register, and row-major order means that each row of the matrix will be stored in a single constant register. This is an important consideration for how many constant registers are used for a matrix.

Row-major and column-major matrix ordering determine the order the matrix components are read from the constant table or from shader inputs. Once the data is written into constant registers, matrix order has no effect on how the data is used or accessed from within shader code. Also, matrices declared in a shader body do not get packed into constant registers.



解释:

    这个row-major和column-major,只是决定你提供给shader的矩阵如何被理解,如果存入寄存器。举个例子,shader code中有column-major的float4x3 matWorld,那么你设置的时候提供一个4×3的矩阵,这个矩阵将占3个float4的寄存器,每列占一个,进行乘法计算的时候,必须是mul(pos,matWorld),也就是pos左乘这个矩阵。

    如果shader中一个row-major的float3×4的矩阵,也占3个寄存器,乘法的时候是mul(matWorld,pos),就是pos右乘矩阵。

    上面做法效率一样,结果一样。

   如果,你混淆着瞎来,结果不是你想要的,就是占多寄存器之类。。。。



posted on 2007-09-27 09:48 Sherk 阅读(1204) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。
<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(3)

随笔档案

相册

好友

搜索

  •  

最新评论

阅读排行榜

评论排行榜