D3DX库中表示4×4的矩阵的类:D3DXMATRIX

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DY_1024/article/details/84027033

编写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;

猜你喜欢

转载自blog.csdn.net/DY_1024/article/details/84027033