d3d 之数学库


一、 矩阵类型

       XNA数学库中针对矩阵的类型为XMMATRIX。这是一个4x4的矩阵,里面可以容纳16个32位浮点数。对于XMMATRIX的初始化,可以有多种方法,一种方法是传4个XMVECTOR参数,每个XMVECTOR对应矩阵的一行;第二种方法是直接传递16个浮点数,代表整个矩阵的内容;第三种方法是用一个FLOAT型的数组,代表整个矩阵的内容。当然,这三种方法都有点麻烦,不过在实际中,自己来手动初始化矩阵的地方也不多,了解下其初始化方法即可。其次,XMMATRIX重载了()操作符,用来访问矩阵中的成员,用法跟正常矩阵访问完全一样,即传递两个参数(row, col)即可。 XMMATRIX也重载了*和*=操作符,用途很明显,用来进行矩阵的乘积。

二、 类成员矩阵类型

       跟XMVECTOR一样,作为局部或全局变量使用时,直接使用XMMATRIX即可。当作为类中成员类型时,推荐使用的类型为XMFLOAT4X4,从名字上一目了然,即4x4矩阵,不像向量一样提供了多种维的类型,这里只提供了4x4的通用类型的矩阵,如果是用较小维的矩阵,多出来的不关心即可。XMFLOAT4X4也重载了()操作符用来访问内部成员。

三、 作为函数参数类型时的规则

       同样,XMMATRIX作为函数参数类型时,其使用也要服从一定的规则。这里规则更为简单,即统一要求使用CXMMATRIX。即在函数定义中,类型为XMMATRIX的形参必须用CXMMATRIX类型代替。

 四、 矩阵相关函数

XMMATRIX XMMatrixIdentity();				//返回单位矩阵,即对角线全1,其他全0
BOOL	 XMMatrixIsIdentity(CXMMATRIX M);		//判断一个矩阵是否为单位矩阵
XMMATRIX XMMatrixMultiply(CXMMATRIX A, CXMMATRIX B);	//两矩阵相乘
XMMATRIX XMMatrixTranspose(CXMMATRIX M);		//矩阵转置
XMVECTOR XMMatrixDeterminant(CXMMATRIX M);		//求矩阵对应行列式的值det
XMMATRIX XMMatrixInverse(XMVECTOR *pDet, CXMMATRIX M);	//求矩阵M的逆,*pDet为该矩阵的det

五、 3D中矩阵变换相关函数

XMMATRIX XMMatrixScaling(FLOAT scaleX, FLOAT scaleY, FLOAT scaleZ);	//伸缩变化,指定三个方向上的伸缩比
XMMATRIX XMMatrixScalingFromVector(FXMVECTOR scale);			//通过向量指定三个方向伸缩比,求伸缩变换
XMMATRIX XMMatrixRotationX(FLOAT angle);				//围绕x轴的旋转变换
XMMATRIX XMMatrixRotationY(FLOAT angle);				//围绕y轴的旋转变换
XMMATRIX XMMatrixRotationZ(FLOAT angle);				//围绕z轴的旋转变换
XMMATRIX XMMatrixRotationAxis(FXMVECTOR axis, FLOAT angle);		//围绕任意轴axis的旋转变换
XMMATRIX XMMatrixTranslation(FLOAT x, FLOAT y, FLOAT z);		//平移变换,指定三个方向的平移量
XMMATRIX XMMatrixTranslationFromVector(FXMVECTOR offset);		//通过向量指定三个方向的平移量,求平移变换
XMVECTOR XMVector3Transform(FXMVECTOR v, CXMMATRIX m);			//向量、矩阵相乘
XMVECTOR XMVector3TransformCoord(FXMVECTOR v, CXMMATRIX m); 		//向量、矩阵相乘,但向量w=1,因此为点的变换
XMVECTOR XMVector3TransformNormal(FXMVECTOR v, CXMMATRIX m);		//向量、矩阵相乘,但向量w=0,因此为向量的变换


你可能感兴趣的:(D3D)