1. 程式人生 > >D3DX庫中表示4×4的矩陣的類:D3DXMATRIX

D3DX庫中表示4×4的矩陣的類:D3DXMATRIX

編寫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;