summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/math/matrix44.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-utils/math/matrix44.cpp')
-rw-r--r--source/modules/asura-utils/math/matrix44.cpp217
1 files changed, 0 insertions, 217 deletions
diff --git a/source/modules/asura-utils/math/matrix44.cpp b/source/modules/asura-utils/math/matrix44.cpp
deleted file mode 100644
index 9ecf448..0000000
--- a/source/modules/asura-utils/math/matrix44.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-#include "Matrix44.h"
-
-#include <cstring> // memcpy
-#include <cmath>
-
-namespace AsuraEngine
-{
- namespace Math
- {
-
- const Matrix44 Matrix44::Identity;
-
- // | e0 e4 e8 e12 |
- // | e1 e5 e9 e13 |
- // | e2 e6 e10 e14 |
- // | e3 e7 e11 e15 |
-
- Matrix44::Matrix44()
- {
- SetIdentity();
- }
-
- Matrix44::Matrix44(const Matrix44& m)
- {
- memcpy(&e, &m.e, 16 * sizeof(float));
- }
-
- Matrix44::~Matrix44()
- {
- }
-
- void Matrix44::operator = (const Matrix44& m)
- {
- memcpy(&e, &m.e, 16 * sizeof(float));
- }
-
- void Matrix44::SetOrtho(float l, float r, float b, float t, float n, float f)
- {
- SetIdentity();
- float w = r - l;
- float h = t - b;
- float z = f - n;
- e[0] = 2 / w;
- e[5] = 2 / h;
- e[10] = -2 / z;
- e[12] = -(r + l) / w;
- e[13] = -(t + b) / h;
- e[14] = -(f + n) / z;
- e[15] = 1;
- }
-
- // | e0 e4 e8 e12 |
- // | e1 e5 e9 e13 |
- // | e2 e6 e10 e14 |
- // | e3 e7 e11 e15 |
- // | e0 e4 e8 e12 |
- // | e1 e5 e9 e13 |
- // | e2 e6 e10 e14 |
- // | e3 e7 e11 e15 |
-
- Matrix44 Matrix44::operator * (const Matrix44 & m) const
- {
- Matrix44 t;
-
- t.e[0] = (e[0] * m.e[0]) + (e[4] * m.e[1]) + (e[8] * m.e[2]) + (e[12] * m.e[3]);
- t.e[4] = (e[0] * m.e[4]) + (e[4] * m.e[5]) + (e[8] * m.e[6]) + (e[12] * m.e[7]);
- t.e[8] = (e[0] * m.e[8]) + (e[4] * m.e[9]) + (e[8] * m.e[10]) + (e[12] * m.e[11]);
- t.e[12] = (e[0] * m.e[12]) + (e[4] * m.e[13]) + (e[8] * m.e[14]) + (e[12] * m.e[15]);
-
- t.e[1] = (e[1] * m.e[0]) + (e[5] * m.e[1]) + (e[9] * m.e[2]) + (e[13] * m.e[3]);
- t.e[5] = (e[1] * m.e[4]) + (e[5] * m.e[5]) + (e[9] * m.e[6]) + (e[13] * m.e[7]);
- t.e[9] = (e[1] * m.e[8]) + (e[5] * m.e[9]) + (e[9] * m.e[10]) + (e[13] * m.e[11]);
- t.e[13] = (e[1] * m.e[12]) + (e[5] * m.e[13]) + (e[9] * m.e[14]) + (e[13] * m.e[15]);
-
- t.e[2] = (e[2] * m.e[0]) + (e[6] * m.e[1]) + (e[10] * m.e[2]) + (e[14] * m.e[3]);
- t.e[6] = (e[2] * m.e[4]) + (e[6] * m.e[5]) + (e[10] * m.e[6]) + (e[14] * m.e[7]);
- t.e[10] = (e[2] * m.e[8]) + (e[6] * m.e[9]) + (e[10] * m.e[10]) + (e[14] * m.e[11]);
- t.e[14] = (e[2] * m.e[12]) + (e[6] * m.e[13]) + (e[10] * m.e[14]) + (e[14] * m.e[15]);
-
- t.e[3] = (e[3] * m.e[0]) + (e[7] * m.e[1]) + (e[11] * m.e[2]) + (e[15] * m.e[3]);
- t.e[7] = (e[3] * m.e[4]) + (e[7] * m.e[5]) + (e[11] * m.e[6]) + (e[15] * m.e[7]);
- t.e[11] = (e[3] * m.e[8]) + (e[7] * m.e[9]) + (e[11] * m.e[10]) + (e[15] * m.e[11]);
- t.e[15] = (e[3] * m.e[12]) + (e[7] * m.e[13]) + (e[11] * m.e[14]) + (e[15] * m.e[15]);
-
- return t;
- }
-
- void Matrix44::operator *= (const Matrix44 & m)
- {
- Matrix44 t = (*this) * m;
- memcpy((void*)this->e, (void*)t.e, sizeof(float) * 16);
- }
-
- const float * Matrix44::GetElements() const
- {
- return e;
- }
-
- void Matrix44::SetIdentity()
- {
- memset(e, 0, sizeof(float) * 16);
- e[0] = e[5] = e[10] = e[15] = 1;
- }
-
- void Matrix44::SetTranslation(float x, float y)
- {
- SetIdentity();
- e[12] = x;
- e[13] = y;
- }
-
- void Matrix44::SetRotation(float rad)
- {
- SetIdentity();
- float c = cos(rad), s = sin(rad);
- e[0] = c; e[4] = -s;
- e[1] = s; e[5] = c;
- }
-
- void Matrix44::SetScale(float sx, float sy)
- {
- SetIdentity();
- e[0] = sx;
- e[5] = sy;
- }
-
- void Matrix44::SetShear(float kx, float ky)
- {
- SetIdentity();
- e[1] = ky;
- e[4] = kx;
- }
-
- void Matrix44::SetTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy)
- {
- memset(e, 0, sizeof(float) * 16); // zero out matrix
- float c = cos(angle), s = sin(angle);
- // matrix multiplication carried out on paper:
- // |1 x| |c -s | |sx | |1 -ox|
- // | 1 y| |s c | | sy | | 1 -oy|
- // | 1 | | 1 | | 1 | | 1 |
- // | 1| | 1| | 1| | 1 |
- // move rotate scale origin
- e[10] = e[15] = 1.0f;
- e[0] = c * sx; // = a
- e[1] = s * sx; // = b
- e[4] = -s * sy; // = c
- e[5] = c * sy; // = d
- e[12] = x - ox * e[0] - oy * e[4];
- e[13] = y - ox * e[1] - oy * e[5];
- }
-
- void Matrix44::Translate(float x, float y)
- {
- Matrix44 t;
- t.SetTranslation(x, y);
- this->operator *=(t);
- }
-
- void Matrix44::Rotate(float rad)
- {
- Matrix44 t;
- t.SetRotation(rad);
- this->operator *=(t);
- }
-
- void Matrix44::Scale(float sx, float sy)
- {
- Matrix44 t;
- t.SetScale(sx, sy);
- this->operator *=(t);
- }
-
- void Matrix44::Shear(float kx, float ky)
- {
- Matrix44 t;
- t.SetShear(kx, ky);
- this->operator *=(t);
- }
-
- void Matrix44::Transform(float x, float y, float angle, float sx, float sy, float ox, float oy)
- {
- Matrix44 t;
- t.SetTransformation(x, y, angle, sx, sy, ox, oy);
- this->operator *=(t);
- }
-
- void Matrix44::Ortho(float left, float right, float bottom, float top, float near, float far)
- {
- Matrix44 t;
- t.SetOrtho(left, right, bottom, top, near, far);
- this->operator *=(t);
- }
-
- // | x |
- // | y |
- // | 0 |
- // | 1 |
- // | e0 e4 e8 e12 |
- // | e1 e5 e9 e13 |
- // | e2 e6 e10 e14 |
- // | e3 e7 e11 e15 |
-
- //void Matrix44::transform(Graphics::Vertex* dst, const Graphics::Vertex* src, int size) const
- //{
- // for (int i = 0; i<size; ++i)
- // {
- // // Store in temp variables in case src = dst
- // float x = (e[0] * src[i].xy.x()) + (e[4] * src[i].xy.y()) + (0) + (e[12]);
- // float y = (e[1] * src[i].xy.x()) + (e[5] * src[i].xy.y()) + (0) + (e[13]);
-
- // dst[i].xy.Set(x, y);
- // }
- //}
-
- } // namespace Math
-} // namespace JinEngine \ No newline at end of file