ShaderX2翻译四 连载中

矩阵类型

另一种非常普遍的类型你将会在你HLSL着色器程序中发现的是matrices(矩阵),是个2D的数组数据类型.跟标量和矢量一样,矩阵也可以由多种基本数据类型:bool,int,half,float,或double.矩阵可以有任何大小,但是你将会发现着色器使用4行4列的矩阵.回忆开始章节顶点着色器的例子,声明了2个4x4float类型的全局矩阵:

 

float4x4 view_proj_matrix;

float4x4 texture_matrix0;

 

自然的,其他矩阵类型也可以被使用,例如我们能用多种方法声明一个3行4列float类型的矩阵

 

float3x4 mat0;

matrix<float, 3, 4> mat1;

 

像vector一样,矩阵中的要素都可以用数组下标表示.例如下面的数组下标能够使用view_proj_matrix矩阵左上的数据

例如下面的数组下标能够使用view_proj_matrix矩阵左上的数据

 

float fValue = view_proj_matrix[0][0];

 

也有种结构语法能够使用矩阵的要素, zero-based row-column position ,你能够如下使用

_m00, _m01, _m02, _m03

_m10, _m11, _m12, _m13

_m20, _m21, _m22, _m23

_m30, _m31, _m32, _m33

 

根据zero-based row-column position,你可以如下使用

_11, _12, _13, _14

_21, _22, _23, _24

_31, _32, _33, _34

_41, _42, _43, _44

 

你也可以使用数组下标

float2x2 fMat = {3.0f, 5.0f, // row 1

2.0f, 1.0f}; // row 2

float value0 = fMat[0]; // value0 is 3.0f

float value1 = fMat._m00; // value1 is 3.0f

float value2 = fMat._12 // value2 is 5.0f

float value3 = fMat[1][1] // value3 is 1.0f

float2 vec0 = fMat._21_22; // vec0 is {2.0f, 1.0f}

float2 vec1 = fMat[1]; // vec1 is {2.0f, 1.0f}

posted @ 2012-06-17 15:52  wuhongxing  阅读(129)  评论(0)    收藏  举报