Initial revision
[0ad:0ad.git] / terrain / bak / 0 / Matrix3D.h
1 //***********************************************************
2 //
3 // Name:                Matrix3D.H
4 // Last Update: 31/1/02
5 // Author:              Poya Manouchehri
6 //
7 // Description: A Matrix class used for holding and 
8 //                              manipulating transformation info.
9 //
10 //***********************************************************
11
12 #ifndef MATRIX3D_H
13 #define MATRIX3D_H
14
15 #include <math.h>
16
17 #include "Vector3D.H"
18
19 class CMatrix3D
20 {
21         public:
22                 float _11, _12, _13, _14;
23                 float _21, _22, _23, _24;
24                 float _31, _32, _33, _34;
25                 float _41, _42, _43, _44;
26
27         public:
28                 CMatrix3D ();
29
30                 //Matrix multiplication
31                 CMatrix3D operator * (CMatrix3D &matrix);
32                 //Matrix multiplication/assignment
33                 CMatrix3D &operator *= (CMatrix3D &matrix);
34
35                 //Sets the identity matrix
36                 void SetIdentity ();
37                 //Sets the zero matrix
38                 void SetZero ();
39
40                 //The following clear the matrix and set the 
41                 //rotation of each of the 3 axes
42                 void SetXRotation (float angle);
43                 void SetYRotation (float angle);
44                 void SetZRotation (float angle);
45
46                 //The following apply a rotation to the matrix
47                 //about each of the axes;
48                 void RotateX (float angle);
49                 void RotateY (float angle);
50                 void RotateZ (float angle);
51
52                 //Sets the translation of the matrix
53                 void SetTranslation (float x, float y, float z);
54                 void SetTranslation (CVector3D &vector);
55
56                 //Applies a translation to the matrix
57                 void Translate (float x, float y, float z);
58                 void Translate (CVector3D &vector);
59
60                 CVector3D GetTranslation ();
61
62                 //Clears and sets the scaling of the matrix
63                 void SetScaling (float x_scale, float y_scale, float z_scale);
64                 //Scales the matrix
65                 void Scale (float x_scale, float y_scale, float z_scale);
66
67                 //Returns the transpose of the matrix. For orthonormal
68                 //matrices, this is the same is the inverse matrix
69                 CMatrix3D GetTranspose ();
70
71                 //Get a vector which points to the left of the matrix
72                 CVector3D GetLeft ();
73                 //Get a vector which points up from the matrix
74                 CVector3D GetUp ();
75                 //Get a vector which points to front of the matrix
76                 CVector3D GetIn ();
77
78                 //Set the matrix from two vectors (Up and In)
79                 void SetFromUpIn (CVector3D &up, CVector3D &in, float scale);
80
81         public: //Vector manipulation methods
82                 //Transform a vector by this matrix
83                 CVector3D Transform (CVector3D &vector);
84                 //Only rotate (not translate) a vector by this matrix
85                 CVector3D Rotate (CVector3D &vector);
86 };
87
88 #endif