123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #pragma once
- #include "Vector.h"
- NS_BF_BEGIN;
- class Matrix4
- {
- public:
- union
- {
- float mMat[4][4];
- float mMatFlat[16];
- struct
- {
- float m00;
- float m01;
- float m02;
- float m03;
- float m10;
- float m11;
- float m12;
- float m13;
- float m20;
- float m21;
- float m22;
- float m23;
- float m30;
- float m31;
- float m32;
- float m33;
- };
- };
- public:
- static Matrix4 sIdentity;
- public:
- inline Matrix4()
- {
- }
- inline Matrix4(
- float m00, float m01, float m02, float m03,
- float m10, float m11, float m12, float m13,
- float m20, float m21, float m22, float m23,
- float m30, float m31, float m32, float m33)
- {
- this->m00 = m00;
- this->m01 = m01;
- this->m02 = m02;
- this->m03 = m03;
- this->m10 = m10;
- this->m11 = m11;
- this->m12 = m12;
- this->m13 = m13;
- this->m20 = m20;
- this->m21 = m21;
- this->m22 = m22;
- this->m23 = m23;
- this->m30 = m30;
- this->m31 = m31;
- this->m32 = m32;
- this->m33 = m33;
- }
- static Matrix4 Multiply(const Matrix4 &m1, const Matrix4 &m2)
- {
- Matrix4 r;
- r.m00 = m1.m00 * m2.m00 + m1.m01 * m2.m10 + m1.m02 * m2.m20 + m1.m03 * m2.m30;
- r.m01 = m1.m00 * m2.m01 + m1.m01 * m2.m11 + m1.m02 * m2.m21 + m1.m03 * m2.m31;
- r.m02 = m1.m00 * m2.m02 + m1.m01 * m2.m12 + m1.m02 * m2.m22 + m1.m03 * m2.m32;
- r.m03 = m1.m00 * m2.m03 + m1.m01 * m2.m13 + m1.m02 * m2.m23 + m1.m03 * m2.m33;
- r.m10 = m1.m10 * m2.m00 + m1.m11 * m2.m10 + m1.m12 * m2.m20 + m1.m13 * m2.m30;
- r.m11 = m1.m10 * m2.m01 + m1.m11 * m2.m11 + m1.m12 * m2.m21 + m1.m13 * m2.m31;
- r.m12 = m1.m10 * m2.m02 + m1.m11 * m2.m12 + m1.m12 * m2.m22 + m1.m13 * m2.m32;
- r.m13 = m1.m10 * m2.m03 + m1.m11 * m2.m13 + m1.m12 * m2.m23 + m1.m13 * m2.m33;
- r.m20 = m1.m20 * m2.m00 + m1.m21 * m2.m10 + m1.m22 * m2.m20 + m1.m23 * m2.m30;
- r.m21 = m1.m20 * m2.m01 + m1.m21 * m2.m11 + m1.m22 * m2.m21 + m1.m23 * m2.m31;
- r.m22 = m1.m20 * m2.m02 + m1.m21 * m2.m12 + m1.m22 * m2.m22 + m1.m23 * m2.m32;
- r.m23 = m1.m20 * m2.m03 + m1.m21 * m2.m13 + m1.m22 * m2.m23 + m1.m23 * m2.m33;
- r.m30 = m1.m30 * m2.m00 + m1.m31 * m2.m10 + m1.m32 * m2.m20 + m1.m33 * m2.m30;
- r.m31 = m1.m30 * m2.m01 + m1.m31 * m2.m11 + m1.m32 * m2.m21 + m1.m33 * m2.m31;
- r.m32 = m1.m30 * m2.m02 + m1.m31 * m2.m12 + m1.m32 * m2.m22 + m1.m33 * m2.m32;
- r.m33 = m1.m30 * m2.m03 + m1.m31 * m2.m13 + m1.m32 * m2.m23 + m1.m33 * m2.m33;
- return r;
- }
- static Matrix4 Transpose(const Matrix4 &m)
- {
- return Matrix4(
- m.m00, m.m10, m.m20, m.m30,
- m.m01, m.m11, m.m21, m.m31,
- m.m02, m.m12, m.m22, m.m32,
- m.m03, m.m13, m.m23, m.m33);
- }
- static Matrix4 CreateTranslation(float x, float y, float z)
- {
- return Matrix4(
- 1, 0, 0, x,
- 0, 1, 0, y,
- 0, 0, 1, z,
- 0, 0, 0, 1);
- }
- static Matrix4 CreateTransform(const Vector3& position, const Vector3& scale, const Quaternion& orientation);
- static float Determinant(float m11, float m12, float m13,
- float m21, float m22, float m23,
- float m31, float m32, float m33)
- {
- return m11 * (m22 * m33 - m32 * m23) -
- m21 * (m12 * m33 - m32 * m13) +
- m31 * (m12 * m23 - m22 * m13);
- }
- };
- NS_BF_END;
|