Public Group

# How D3DXMATRIX Variables work?

This topic is 3892 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Just wondering how its done: D3DXMATRIX structure allow user to manipulate its matrix by: e,g Matrix._11, Matrix._34 and Matrix.m[0][0], Matrix.m[2][3], in a array format How is it that if i set Matrix._11 = 10.0f, Matrix.m[0][0] also get updated by itself? Thanks

##### Share on other sites
D3DXMATRIX publicly inherits from D3DMATRIX, to add a variety of operations.

The answer to your question is that D3DMATRIX uses a union to define a struct of sixteen floats that occupies the same space as a four-by-four array of floats.

// D3DMATRIXtypedef struct _D3DMATRIX {    union {        struct {            float        _11, _12, _13, _14;            float        _21, _22, _23, _24;            float        _31, _32, _33, _34;            float        _41, _42, _43, _44;        };        float m[4][4];    };} D3DMATRIX;// D3DXMATRIXtypedef struct D3DXMATRIX : public D3DMATRIX{public:    D3DXMATRIX() {};    D3DXMATRIX( CONST FLOAT * );    D3DXMATRIX( CONST D3DMATRIX& );    D3DXMATRIX( CONST D3DXFLOAT16 * );    D3DXMATRIX( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,                FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,                FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,                FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 );    // access grants    FLOAT& operator () ( UINT Row, UINT Col );    FLOAT  operator () ( UINT Row, UINT Col ) const;    // casting operators    operator FLOAT* ();    operator CONST FLOAT* () const;    // assignment operators    D3DXMATRIX& operator *= ( CONST D3DXMATRIX& );    D3DXMATRIX& operator += ( CONST D3DXMATRIX& );    D3DXMATRIX& operator -= ( CONST D3DXMATRIX& );    D3DXMATRIX& operator *= ( FLOAT );    D3DXMATRIX& operator /= ( FLOAT );    // unary operators    D3DXMATRIX operator + () const;    D3DXMATRIX operator - () const;    // binary operators    D3DXMATRIX operator * ( CONST D3DXMATRIX& ) const;    D3DXMATRIX operator + ( CONST D3DXMATRIX& ) const;    D3DXMATRIX operator - ( CONST D3DXMATRIX& ) const;    D3DXMATRIX operator * ( FLOAT ) const;    D3DXMATRIX operator / ( FLOAT ) const;    friend D3DXMATRIX operator * ( FLOAT, CONST D3DXMATRIX& );    BOOL operator == ( CONST D3DXMATRIX& ) const;    BOOL operator != ( CONST D3DXMATRIX& ) const;} D3DXMATRIX, *LPD3DXMATRIX;

##### Share on other sites
All the magic is in the base of D3DXMATRIX which is D3DMATRIX.
If you look in d3d9types.h, you'll see that D3DMATRIX is defined like this:
typedef struct _D3DMATRIX {    union {        struct {            float        _11, _12, _13, _14;            float        _21, _22, _23, _24;            float        _31, _32, _33, _34;            float        _41, _42, _43, _44;        };        float m[4][4];    };} D3DMATRIX;

1. 1
2. 2
Rutin
24
3. 3
4. 4
JoeJ
18
5. 5

• 14
• 22
• 11
• 11
• 9
• ### Forum Statistics

• Total Topics
631766
• Total Posts
3002218
×