编写Director3D应用程序时,我们通常只使用4×4的矩阵以及1×4的行向量。
注意:使用这两种维数的矩阵,意味着一下的乘法是有意义的:
1、向量——矩阵乘法,若v是1×4的行向量,T为4×4的矩阵,则乘积vT是有意义的,是1×4的行向量
2、矩阵——矩阵乘法,若T和R都是4×4的矩阵,则乘机就是4×4的矩阵,乘积TR和RT都有意义,但是TR和RT不一定相等
在D3DX中可以使用D3DXVECTOR3和D3DXVECTOR4类表示向量 ,不过D3DXVECTOR3里面只包含3个分量,具体类的内容可以查看:D3DX库中表示3D空间向量的类:D3DXVECTOR3
在D3DX中表示4×4的矩阵,可以使用类:D3DXMATRIX,定义如下:
typedef struct D3DXMATRIX:public D3DMATRIX{
public:
D3DXMATRIX() {};
D3DXMATRIX(CONST FLOAT*);
D3DXMATRIX (CONST D3DMATRIX& );
D3DXMATRIX (CONST D3DXFLOATI6*);
D3DXMATRIX( FLOAT _11, FLOAT _12, FLONT _13, FLOAT _14,
FLOAT _21, FLOAT _22, FLOAT _23, FLONT _24,
FLOAT _31, FLOAT _32, FLOAT _33, FLORT _34,
FLOAT _34, FLOATL_42, FLOAT _43, FLOAT _44
);
FLOAT& operator() (UNIT Row, UINT Col);
FIOAT& operator() (UNIT Row, UINT Col)const;
operate FLOAT* ();
operate CONST FLOAT* () const;
D3DXMATRIX& operator *= (CONST D3DXMATRIX&);
D3DXMATRIX& operator += (CONST D3DXMATRIX&);
D3DXMATRIX& operator -= (CONST D3DXMATRIX&);
D3DXMATRIX& operator *= (FLOAT);
D3DXMATRIX& operator /= (FLOAT);
D3DXMATRIX operator +()const;
D3DXMATRIX operator -()const;
D3DXMATRIX operator *(CONST D3DXMATRIX&)const;
D3DXMATRIX operator +(CONST D3DXMATRIX&)const;
D3DXMATRIX operator -(CONST D3DXMATRIX&)const;
D3DXMATRIX operator *(CONST D3DXMATRIX&)const;
D3DXMATRIX operator /(CONST D3DXMATRIX&)const;
friend D3DXMATRIX operator *(FLOAT,CONST D3DXMATRIX&);
BOOL operator ==(CONST D3DXMATRIX&)const;
BOOL operator !=(CONST D3DXMATRIX&)const;
}D3DXMATRIX,*LPD3DXMATRIX;
类里面的数据成员继承自结构体:D3DMATRIX,其定义如下:
union{
struct {
float 11,12,13,14;
float 21,22,23,24;
float 31,21,33,34;
float 41,42,43,44;
}
float m[4][4];
}D3DMATRIX;