How D3DXMATRIX Variables work?
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
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.
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;
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:
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;
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement