raSystem  1.0 bata
raMatrix.h
Go to the documentation of this file.
1 #pragma once
2 
4 
5  class RAPI raMatrix
6  {
7  public:
8  union
9  {
10  struct
11  {
12  float m11, m12, m13, m14,
13  m21, m22, m23, m24,
14  m31, m32, m33, m34,
15  m41, m42, m43, m44;
16  };
17 
18  float m[4][4];
19  float n[16];
20  };
21 
22  raMatrix() {}
23  raMatrix(const raMatrix& m) : m11(m.m11), m12(m.m12), m13(m.m13), m14(m.m14),
24  m21(m.m21), m22(m.m22), m23(m.m23), m24(m.m24),
25  m31(m.m31), m32(m.m32), m33(m.m33), m34(m.m34),
26  m41(m.m41), m42(m.m42), m43(m.m43), m44(m.m44) {}
27 
28  raMatrix(float _m11, float _m12, float _m13, float _m14,
29  float _m21, float _m22, float _m23, float _m24,
30  float _m31, float _m32, float _m33, float _m34,
31  float _m41, float _m42, float _m43, float _m44) : m11(_m11), m12(_m12), m13(_m13), m14(_m14),
32  m21(_m21), m22(_m22), m23(_m23), m24(_m24),
33  m31(_m31), m32(_m32), m33(_m33), m34(_m34),
34  m41(_m41), m42(_m42), m43(_m43), m44(_m44) {}
35 
36  raMatrix(D3DXMATRIX _mat) : m11(_mat._11), m12(_mat._12), m13(_mat._13), m14(_mat._14),
37  m21(_mat._21), m22(_mat._22), m23(_mat._23), m24(_mat._24),
38  m31(_mat._31), m32(_mat._32), m33(_mat._33), m34(_mat._34),
39  m41(_mat._41), m42(_mat._42), m43(_mat._43), m44(_mat._44) {}
40 
41  operator float* () {return (float*)(n);}
42  operator D3DXMATRIX () {return D3DXMATRIX(m11, m12, m13, m14,
43  m21, m22, m23, m24,
44  m31, m32, m33, m34,
45  m41, m42, m43, m44); }
46 
47  float& operator () (int iRow, int iColumn) {return m[iRow - 1][iColumn - 1];}
48  float operator () (int iRow, int iColumn) const {return m[iRow - 1][iColumn - 1];}
49 
50  raMatrix& operator += (const raMatrix& m)
51  {
52  m11 += m.m11; m12 += m.m12; m13 += m.m13; m14 += m.m14;
53  m21 += m.m21; m22 += m.m22; m23 += m.m23; m24 += m.m24;
54  m31 += m.m31; m32 += m.m32; m33 += m.m33; m34 += m.m34;
55  m41 += m.m41; m42 += m.m42; m43 += m.m43; m44 += m.m44;
56  return *this;
57  }
58 
59  raMatrix& operator -= (const raMatrix& m)
60  {
61  m11 -= m.m11; m12 -= m.m12; m13 -= m.m13; m14 -= m.m14;
62  m21 -= m.m21; m22 -= m.m22; m23 -= m.m23; m24 -= m.m24;
63  m31 -= m.m31; m32 -= m.m32; m33 -= m.m33; m34 -= m.m34;
64  m41 -= m.m41; m42 -= m.m42; m43 -= m.m43; m44 -= m.m44;
65  return *this;
66  }
67 
68  raMatrix& operator *= (const raMatrix& m)
69  {
70  return *this = raMatrix(m.m11 * m11 + m.m21 * m12 + m.m31 * m13 + m.m41 * m14,
71  m.m12 * m11 + m.m22 * m12 + m.m32 * m13 + m.m42 * m14,
72  m.m13 * m11 + m.m23 * m12 + m.m33 * m13 + m.m43 * m14,
73  m.m14 * m11 + m.m24 * m12 + m.m34 * m13 + m.m44 * m14,
74  m.m11 * m21 + m.m21 * m22 + m.m31 * m23 + m.m41 * m24,
75  m.m12 * m21 + m.m22 * m22 + m.m32 * m23 + m.m42 * m24,
76  m.m13 * m21 + m.m23 * m22 + m.m33 * m23 + m.m43 * m24,
77  m.m14 * m21 + m.m24 * m22 + m.m34 * m23 + m.m44 * m24,
78  m.m11 * m31 + m.m21 * m32 + m.m31 * m33 + m.m41 * m34,
79  m.m12 * m31 + m.m22 * m32 + m.m32 * m33 + m.m42 * m34,
80  m.m13 * m31 + m.m23 * m32 + m.m33 * m33 + m.m43 * m34,
81  m.m14 * m31 + m.m24 * m32 + m.m34 * m33 + m.m44 * m34,
82  m.m11 * m41 + m.m21 * m42 + m.m31 * m43 + m.m41 * m44,
83  m.m12 * m41 + m.m22 * m42 + m.m32 * m43 + m.m42 * m44,
84  m.m13 * m41 + m.m23 * m42 + m.m33 * m43 + m.m43 * m44,
85  m.m14 * m41 + m.m24 * m42 + m.m34 * m43 + m.m44 * m44);
86  }
87 
88  raMatrix& operator *= (const float f)
89  {
90  m11 *= f; m12 *= f; m13 *= f; m14 *= f;
91  m21 *= f; m22 *= f; m23 *= f; m24 *= f;
92  m31 *= f; m32 *= f; m33 *= f; m34 *= f;
93  m41 *= f; m42 *= f; m43 *= f; m44 *= f;
94  return *this;
95  }
96 
97  raMatrix& operator /= (const raMatrix& m)
98  {
99  return *this *= raMatrixInvert(m);
100  }
101 
102  raMatrix& operator /= (const float f)
103  {
104  m11 /= f; m12 /= f; m13 /= f; m14 /= f;
105  m21 /= f; m22 /= f; m23 /= f; m24 /= f;
106  m31 /= f; m32 /= f; m33 /= f; m34 /= f;
107  m41 /= f; m42 /= f; m43 /= f; m44 /= f;
108  return *this;
109  }
110  };
111  inline raMatrix operator + (const raMatrix& a, const raMatrix& b) {return raMatrix(a.m11 + b.m11, a.m12 + b.m12, a.m13 + b.m13, a.m14 + b.m14, a.m21 + b.m21, a.m22 + b.m22, a.m23 + b.m23, a.m24 + b.m24, a.m31 + b.m31, a.m32 + b.m32, a.m33 + b.m33, a.m34 + b.m34, a.m41 + b.m41, a.m42 + b.m42, a.m43 + b.m43, a.m44 + b.m44);}
112  inline raMatrix operator - (const raMatrix& a, const raMatrix& b) {return raMatrix(a.m11 - b.m11, a.m12 - b.m12, a.m13 - b.m13, a.m14 - b.m14, a.m21 - b.m21, a.m22 - b.m22, a.m23 - b.m23, a.m24 - b.m24, a.m31 - b.m31, a.m32 - b.m32, a.m33 - b.m33, a.m34 - b.m34, a.m41 - b.m41, a.m42 - b.m42, a.m43 - b.m43, a.m44 - b.m44);}
113  inline raMatrix operator - (const raMatrix& m) {return raMatrix(-m.m11, -m.m12, -m.m13, -m.m14, -m.m21, -m.m22, -m.m23, -m.m24, -m.m31, -m.m32, -m.m33, -m.m34, -m.m41, -m.m42, -m.m43, -m.m44);}
114 
115  inline raMatrix operator * (const raMatrix& a,
116  const raMatrix& b)
117  {
118  return raMatrix(b.m11 * a.m11 + b.m21 * a.m12 + b.m31 * a.m13 + b.m41 * a.m14,
119  b.m12 * a.m11 + b.m22 * a.m12 + b.m32 * a.m13 + b.m42 * a.m14,
120  b.m13 * a.m11 + b.m23 * a.m12 + b.m33 * a.m13 + b.m43 * a.m14,
121  b.m14 * a.m11 + b.m24 * a.m12 + b.m34 * a.m13 + b.m44 * a.m14,
122  b.m11 * a.m21 + b.m21 * a.m22 + b.m31 * a.m23 + b.m41 * a.m24,
123  b.m12 * a.m21 + b.m22 * a.m22 + b.m32 * a.m23 + b.m42 * a.m24,
124  b.m13 * a.m21 + b.m23 * a.m22 + b.m33 * a.m23 + b.m43 * a.m24,
125  b.m14 * a.m21 + b.m24 * a.m22 + b.m34 * a.m23 + b.m44 * a.m24,
126  b.m11 * a.m31 + b.m21 * a.m32 + b.m31 * a.m33 + b.m41 * a.m34,
127  b.m12 * a.m31 + b.m22 * a.m32 + b.m32 * a.m33 + b.m42 * a.m34,
128  b.m13 * a.m31 + b.m23 * a.m32 + b.m33 * a.m33 + b.m43 * a.m34,
129  b.m14 * a.m31 + b.m24 * a.m32 + b.m34 * a.m33 + b.m44 * a.m34,
130  b.m11 * a.m41 + b.m21 * a.m42 + b.m31 * a.m43 + b.m41 * a.m44,
131  b.m12 * a.m41 + b.m22 * a.m42 + b.m32 * a.m43 + b.m42 * a.m44,
132  b.m13 * a.m41 + b.m23 * a.m42 + b.m33 * a.m43 + b.m43 * a.m44,
133  b.m14 * a.m41 + b.m24 * a.m42 + b.m34 * a.m43 + b.m44 * a.m44);
134  }
135 
136  inline raMatrix operator * (const raMatrix& m,
137  const float f)
138  {
139  return raMatrix(m.m11 * f, m.m12 * f, m.m13 * f, m.m14 * f,
140  m.m21 * f, m.m22 * f, m.m23 * f, m.m24 * f,
141  m.m31 * f, m.m32 * f, m.m33 * f, m.m34 * f,
142  m.m41 * f, m.m42 * f, m.m43 * f, m.m44 * f);
143  }
144 
145  inline raMatrix operator * (const float f,
146  const raMatrix& m)
147  {
148  return raMatrix(m.m11 * f, m.m12 * f, m.m13 * f, m.m14 * f,
149  m.m21 * f, m.m22 * f, m.m23 * f, m.m24 * f,
150  m.m31 * f, m.m32 * f, m.m33 * f, m.m34 * f,
151  m.m41 * f, m.m42 * f, m.m43 * f, m.m44 * f);
152  }
153 
154  inline raMatrix operator / (const raMatrix& a, const raMatrix& b) {return a * raMatrixInvert(b);}
155 
156  inline raMatrix operator / (const raMatrix& m,
157  const float f)
158  {
159  return raMatrix(m.m11 / f, m.m12 / f, m.m13 / f, m.m14 / f,
160  m.m21 / f, m.m22 / f, m.m23 / f, m.m24 / f,
161  m.m31 / f, m.m32 / f, m.m33 / f, m.m34 / f,
162  m.m41 / f, m.m42 / f, m.m43 / f, m.m44 / f);
163  }
164 
165  // Vergleichsoperatoren
166  inline bool operator == (const raMatrix& a,
167  const raMatrix& b)
168  {
169  if(a.m11 != b.m11) return false;
170  if(a.m12 != b.m12) return false;
171  if(a.m13 != b.m13) return false;
172  if(a.m14 != b.m14) return false;
173  if(a.m21 != b.m21) return false;
174  if(a.m22 != b.m22) return false;
175  if(a.m23 != b.m23) return false;
176  if(a.m24 != b.m24) return false;
177  if(a.m31 != b.m31) return false;
178  if(a.m32 != b.m32) return false;
179  if(a.m33 != b.m33) return false;
180  if(a.m34 != b.m34) return false;
181  if(a.m41 != b.m41) return false;
182  if(a.m42 != b.m42) return false;
183  if(a.m43 != b.m43) return false;
184  return a.m44 == b.m44;
185  }
186 
187  // Vergleichsoperatoren
188  inline bool operator != (const raMatrix& a,
189  const raMatrix& b)
190  {
191  if(a.m11 != b.m11) return true;
192  if(a.m12 != b.m12) return true;
193  if(a.m13 != b.m13) return true;
194  if(a.m14 != b.m14) return true;
195  if(a.m21 != b.m21) return true;
196  if(a.m22 != b.m22) return true;
197  if(a.m23 != b.m23) return true;
198  if(a.m24 != b.m24) return true;
199  if(a.m31 != b.m31) return true;
200  if(a.m32 != b.m32) return true;
201  if(a.m33 != b.m33) return true;
202  if(a.m34 != b.m34) return true;
203  if(a.m41 != b.m41) return true;
204  if(a.m42 != b.m42) return true;
205  if(a.m43 != b.m43) return true;
206  return a.m44 != b.m44;
207  }
208 
209  // ******************************************************************
210  // Funktionen deklarieren
211  inline raMatrix raMatrixIdentity() {return raMatrix(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);}
213  RAPI raMatrix raMatrixRotationX(const float f);
214  RAPI raMatrix raMatrixRotationY(const float f);
215  RAPI raMatrix raMatrixRotationZ(const float f);
216  RAPI raMatrix raMatrixRotation(const float x, const float y, const float z);
218  RAPI raMatrix raMatrixRotationAxis(const raVector3& v, const float f);
220  RAPI raMatrix raMatrixAxes(const raVector3& vXAxis, const raVector3& vYAxis, const raVector3& vZAxis);
221  RAPI float raMatrixDet(const raMatrix& m, float* pfOut);
224  RAPI raMatrix raMatrixProjection(const float fFOV, const float fAspect, const float fNearPlane, const float fFarPlane);
225  RAPI raMatrix raMatrixCamera(const raVector3& vPos, const raVector3& vLookAt, const raVector3& vUp = raVector3(0.0f, 1.0f, 0.0f));
bool operator==(const raMatrix &a, const raMatrix &b)
Definition: raMatrix.h:166
float m11
Definition: raMatrix.h:12
float m44
Definition: raMatrix.h:12
#define RAPI
Definition: raMain.h:11
raMatrix raMatrixIdentity()
Definition: raMatrix.h:211
raMatrix(float _m11, float _m12, float _m13, float _m14, float _m21, float _m22, float _m23, float _m24, float _m31, float _m32, float _m33, float _m34, float _m41, float _m42, float _m43, float _m44)
Definition: raMatrix.h:28
bool operator!=(const raMatrix &a, const raMatrix &b)
Definition: raMatrix.h:188
raMatrix operator*(const raMatrix &a, const raMatrix &b)
Definition: raMatrix.h:115
RAPI float raMatrixDet(const raMatrix &m, float *pfOut)
raMatrix operator/(const raMatrix &a, const raMatrix &b)
Definition: raMatrix.h:154
float m33
Definition: raMatrix.h:12
RAPI raMatrix raMatrixScaling(const raVector3 &v)
Definition: raMatrix.cpp:100
raMatrix(D3DXMATRIX _mat)
Definition: raMatrix.h:36
raMatrix(const raMatrix &m)
Definition: raMatrix.h:23
float m14
Definition: raMatrix.h:12
float m31
Definition: raMatrix.h:12
float m32
Definition: raMatrix.h:12
RAPI raMatrix raMatrixTranslation(const raVector3 &v)
Definition: raMatrix.cpp:5
RAPI raMatrix raMatrixRotationX(const float f)
Definition: raMatrix.cpp:12
raMatrix operator-(const raMatrix &a, const raMatrix &b)
Definition: raMatrix.h:112
float m23
Definition: raMatrix.h:12
float m22
Definition: raMatrix.h:12
RAPI raMatrix raMatrixRotationY(const float f)
Definition: raMatrix.cpp:28
RAPI raMatrix raMatrixRotationAxis(const raVector3 &v, const float f)
Definition: raMatrix.cpp:74
RAPI raMatrix raMatrixRotationZ(const float f)
Definition: raMatrix.cpp:43
float m41
Definition: raMatrix.h:12
RAPI raMatrix raMatrixCamera(const raVector3 &vPos, const raVector3 &vLookAt, const raVector3 &vUp=raVector3(0.0f, 1.0f, 0.0f))
Definition: raMatrix.cpp:170
float m13
Definition: raMatrix.h:12
RAPI raMatrix raMatrixRotation(const float x, const float y, const float z)
Definition: raMatrix.cpp:59
float m12
Definition: raMatrix.h:12
RAPI raMatrix raMatrixTranspose(const raMatrix &m)
Definition: raMatrix.cpp:148
float m24
Definition: raMatrix.h:12
class RAPI raMatrix
Definition: raVector3.h:3
RAPI raMatrix raMatrixToTex2DMatrix(const raMatrix &m)
Definition: raMatrix.cpp:185
float m34
Definition: raMatrix.h:12
raMatrix operator+(const raMatrix &a, const raMatrix &b)
Definition: raMatrix.h:111
RAPI raMatrix raMatrixAxes(const raVector3 &vXAxis, const raVector3 &vYAxis, const raVector3 &vZAxis)
Definition: raMatrix.cpp:107
raMatrix()
Definition: raMatrix.h:22
float m43
Definition: raMatrix.h:12
RAPI raMatrix raMatrixInvert(const raMatrix &m)
Definition: raMatrix.cpp:122
float m42
Definition: raMatrix.h:12
float m21
Definition: raMatrix.h:12
RAPI raMatrix raMatrixProjection(const float fFOV, const float fAspect, const float fNearPlane, const float fFarPlane)
Definition: raMatrix.cpp:156