raSystem  1.0 bata
raMatrix.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
6 {
7  return raMatrix(1.0f, 0.0f, 0.0f, 0.0f,
8  0.0f, 1.0f, 0.0f, 0.0f,
9  0.0f, 0.0f, 1.0f, 0.0f,
10  v.x, v.y, v.z, 1.0f);
11 }
13 {
14  raMatrix mResult;
15 
16  // Rotationsmatrix berechnen
17  mResult.m11 = 1.0f; mResult.m12 = 0.0f; mResult.m13 = 0.0f; mResult.m14 = 0.0f;
18  mResult.m21 = 0.0f; mResult.m24 = 0.0f;
19  mResult.m31 = 0.0f; mResult.m34 = 0.0f;
20  mResult.m41 = 0.0f; mResult.m42 = 0.0f; mResult.m43 = 0.0f; mResult.m44 = 1.0f;
21 
22  mResult.m22 = mResult.m33 = cosf(f);
23  mResult.m23 = sinf(f);
24  mResult.m32 = -mResult.m23;
25 
26  return mResult;
27 }
29 {
30  raMatrix mResult;
31 
32  mResult.m12 = 0.0f; mResult.m14 = 0.0f;
33  mResult.m21 = 0.0f; mResult.m22 = 1.0f; mResult.m23 = 0.0f; mResult.m24 = 0.0f;
34  mResult.m32 = 0.0f; mResult.m34 = 0.0f;
35  mResult.m41 = 0.0f; mResult.m42 = 0.0f; mResult.m43 = 0.0f; mResult.m44 = 1.0f;
36 
37  mResult.m11 = mResult.m33 = cosf(f);
38  mResult.m31 = sinf(f);
39  mResult.m13 = -mResult.m31;
40 
41  return mResult;
42 }
44 {
45  raMatrix mResult;
46 
47  // Rotationsmatrix berechnen
48  mResult.m13 = 0.0f; mResult.m14 = 0.0f;
49  mResult.m23 = 0.0f; mResult.m24 = 0.0f;
50  mResult.m31 = 0.0f; mResult.m32 = 0.0f; mResult.m33 = 1.0f; mResult.m34 = 0.0f;
51  mResult.m41 = 0.0f; mResult.m42 = 0.0f; mResult.m43 = 0.0f; mResult.m44 = 1.0f;
52 
53  mResult.m11 = mResult.m22 = cosf(f);
54  mResult.m12 = sinf(f);
55  mResult.m21 = -mResult.m12;
56 
57  return mResult;
58 }
60  const float y,
61  const float z)
62 {
63  return raMatrixRotationZ(z) *
66 }
68 {
69  return raMatrixRotationZ(v.z) *
70  raMatrixRotationX(v.x) *
72 }
73 
75  const float f)
76 {
77  const float fSin = sinf(-f);
78  const float fCos = cosf(-f);
79  const float fOneMinusCos = 1.0f - fCos;
80 
81  const raVector3 vAxis(raVector3Normalize(v));
82 
83  return raMatrix((float)(vAxis.x * vAxis.x) * fOneMinusCos + fCos,
84  (float)(vAxis.x * vAxis.y) * fOneMinusCos - ((float)vAxis.z * fSin),
85  (float)(vAxis.x * vAxis.z) * fOneMinusCos + ((float)vAxis.y * fSin),
86  0.0f,
87  (float)(vAxis.y * vAxis.x) * fOneMinusCos + ((float)vAxis.z * fSin),
88  (float)(vAxis.y * vAxis.y) * fOneMinusCos + fCos,
89  (float)(vAxis.y * vAxis.z) * fOneMinusCos - ((float)vAxis.x * fSin),
90  0.0f,
91  (float)(vAxis.z * vAxis.x) * fOneMinusCos - ((float)vAxis.y * fSin),
92  (float)(vAxis.z * vAxis.y) * fOneMinusCos + ((float)vAxis.x * fSin),
93  (float)(vAxis.z * vAxis.z) * fOneMinusCos + fCos,
94  0.0f,
95  0.0f,
96  0.0f,
97  0.0f,
98  1.0f);
99 }
101 {
102  return raMatrix(v.x, 0.0f, 0.0f, 0.0f,
103  0.0f, v.y, 0.0f, 0.0f,
104  0.0f, 0.0f, v.z, 0.0f,
105  0.0f, 0.0f, 0.0f, 1.0f);
106 }
108  const raVector3& vYAxis,
109  const raVector3& vZAxis)
110 {
111  return raMatrix(vXAxis.x, vXAxis.y, vXAxis.z, 0.0f,
112  vYAxis.x, vYAxis.y, vYAxis.z, 0.0f,
113  vZAxis.x, vZAxis.y, vZAxis.z, 0.0f,
114  0.0f, 0.0f, 0.0f, 1.0f);
115 }
116 RAPI float raMatrixDet(const raMatrix& m)
117 {
118  return m.m11 * (m.m22 * m.m33 - m.m23 * m.m32) -
119  m.m12 * (m.m21 * m.m33 - m.m23 * m.m31) +
120  m.m13 * (m.m21 * m.m32 - m.m22 * m.m31);
121 }
123 {
124  float fInvDet = raMatrixDet(m);
125  if(fInvDet == 0.0f) return raMatrixIdentity();
126  fInvDet = 1.0f / fInvDet;
127 
128  raMatrix mResult;
129  mResult.m11 = fInvDet * (m.m22 * m.m33 - m.m23 * m.m32);
130  mResult.m12 = -fInvDet * (m.m12 * m.m33 - m.m13 * m.m32);
131  mResult.m13 = fInvDet * (m.m12 * m.m23 - m.m13 * m.m22);
132  mResult.m14 = 0.0f;
133  mResult.m21 = -fInvDet * (m.m21 * m.m33 - m.m23 * m.m31);
134  mResult.m22 = fInvDet * (m.m11 * m.m33 - m.m13 * m.m31);
135  mResult.m23 = -fInvDet * (m.m11 * m.m23 - m.m13 * m.m21);
136  mResult.m24 = 0.0f;
137  mResult.m31 = fInvDet * (m.m21 * m.m32 - m.m22 * m.m31);
138  mResult.m32 = -fInvDet * (m.m11 * m.m32 - m.m12 * m.m31);
139  mResult.m33 = fInvDet * (m.m11 * m.m22 - m.m12 * m.m21);
140  mResult.m34 = 0.0f;
141  mResult.m41 = -(m.m41 * mResult.m11 + m.m42 * mResult.m21 + m.m43 * mResult.m31);
142  mResult.m42 = -(m.m41 * mResult.m12 + m.m42 * mResult.m22 + m.m43 * mResult.m32);
143  mResult.m43 = -(m.m41 * mResult.m13 + m.m42 * mResult.m23 + m.m43 * mResult.m33);
144  mResult.m44 = 1.0f;
145 
146  return mResult;
147 }
149 {
150  // Matrix transponieren
151  return raMatrix(m.m11, m.m21, m.m31, m.m41,
152  m.m12, m.m22, m.m32, m.m42,
153  m.m13, m.m23, m.m33, m.m43,
154  m.m14, m.m24, m.m34, m.m44);
155 }
157  const float fAspect,
158  const float fNearPlane,
159  const float fFarPlane)
160 {
161  const float s = 1.0f / tanf(fFOV * 0.5f);
162  const float Q = fFarPlane / (fFarPlane - fNearPlane);
163 
164  return raMatrix(s / fAspect, 0.0f, 0.0f, 0.0f,
165  0.0f, s, 0.0f, 0.0f,
166  0.0f, 0.0f, Q, 1.0f,
167  0.0f, 0.0f, -Q * fNearPlane, 0.0f);
168 }
169 
171  const raVector3& vLookAt,
172  const raVector3& vUp)
173 {
174  raVector3 vZAxis(raVector3Normalize(vLookAt - vPos));
175 
176  raVector3 vXAxis(raVector3Normalize(raVector3Cross(vUp, vZAxis)));
177 
178  raVector3 vYAxis(raVector3Normalize(raVector3Cross(vZAxis, vXAxis)));
179  return raMatrixTranslation(-vPos) *
180  raMatrix(vXAxis.x, vYAxis.x, vZAxis.x, 0.0f,
181  vXAxis.y, vYAxis.y, vZAxis.y, 0.0f,
182  vXAxis.z, vYAxis.z, vZAxis.z, 0.0f,
183  0.0f, 0.0f, 0.0f, 1.0f);
184 }
186 {
187  return raMatrix(m.m11, m.m12, m.m14, 0.0f,
188  m.m21, m.m22, m.m24, 0.0f,
189  m.m41, m.m42, m.m44, 0.0f,
190  0.0f, 0.0f, 0.0f, 1.0f);
191 }
192 };
float m11
Definition: raMatrix.h:12
float m44
Definition: raMatrix.h:12
raFloat y
Definition: raVector3.h:13
raFloat x
Definition: raVector3.h:12
raVector3 raVector3Cross(const raVector3 &v1, raVector3 &v2)
Definition: raVector3.h:62
#define RAPI
Definition: raMain.h:11
RAPI raMatrix raMatrixToTex2DMatrix(const raMatrix &m)
Definition: raMatrix.cpp:185
raMatrix raMatrixIdentity()
Definition: raMatrix.h:211
RAPI raMatrix raMatrixRotationAxis(const raVector3 &v, const float f)
Definition: raMatrix.cpp:74
RAPI raMatrix raMatrixRotationY(const float f)
Definition: raMatrix.cpp:28
float m33
Definition: raMatrix.h:12
RAPI raMatrix raMatrixRotation(const float x, const float y, const float z)
Definition: raMatrix.cpp:59
raVector3 raVector3Normalize(const raVector3 &v)
Definition: raVector3.h:60
raFloat z
Definition: raVector3.h:14
RAPI raMatrix raMatrixRotationX(const float f)
Definition: raMatrix.cpp:12
float m14
Definition: raMatrix.h:12
float m31
Definition: raMatrix.h:12
float m32
Definition: raMatrix.h:12
RAPI raMatrix raMatrixAxes(const raVector3 &vXAxis, const raVector3 &vYAxis, const raVector3 &vZAxis)
Definition: raMatrix.cpp:107
float m23
Definition: raMatrix.h:12
float m22
Definition: raMatrix.h:12
RAPI raMatrix raMatrixTranspose(const raMatrix &m)
Definition: raMatrix.cpp:148
float m41
Definition: raMatrix.h:12
float m13
Definition: raMatrix.h:12
RAPI raMatrix raMatrixProjection(const float fFOV, const float fAspect, const float fNearPlane, const float fFarPlane)
Definition: raMatrix.cpp:156
float m12
Definition: raMatrix.h:12
RAPI raMatrix raMatrixScaling(const raVector3 &v)
Definition: raMatrix.cpp:100
RAPI raMatrix raMatrixTranslation(const raVector3 &v)
Definition: raMatrix.cpp:5
RAPI float raMatrixDet(const raMatrix &m)
Definition: raMatrix.cpp:116
float m24
Definition: raMatrix.h:12
class RAPI raMatrix
Definition: raVector3.h:3
RAPI raMatrix raMatrixCamera(const raVector3 &vPos, const raVector3 &vLookAt, const raVector3 &vUp)
Definition: raMatrix.cpp:170
RAPI raMatrix raMatrixInvert(const raMatrix &m)
Definition: raMatrix.cpp:122
float m34
Definition: raMatrix.h:12
RAPI raMatrix raMatrixRotationZ(const float f)
Definition: raMatrix.cpp:43
float m43
Definition: raMatrix.h:12
float m42
Definition: raMatrix.h:12
float m21
Definition: raMatrix.h:12