diff --git a/KREngine/KREngine/Classes/KRMat4.cpp b/KREngine/KREngine/Classes/KRMat4.cpp index 27758a3..2f144b5 100644 --- a/KREngine/KREngine/Classes/KRMat4.cpp +++ b/KREngine/KREngine/Classes/KRMat4.cpp @@ -34,6 +34,7 @@ #include #include "KRMat4.h" +#include "KRQuaternion.h" KRMat4::KRMat4() { // Default constructor - Initialize with an identity matrix @@ -171,6 +172,11 @@ void KRMat4::rotate(GLfloat angle, AXIS axis) { *this *= newMatrix; } +void KRMat4::rotate(const KRQuaternion &q) +{ + *this *= q.rotationMatrix(); +} + /* Scale matrix by separate x, y, and z amounts */ void KRMat4::scale(GLfloat x, GLfloat y, GLfloat z) { KRMat4 newMatrix; // Create new identity matrix @@ -330,4 +336,18 @@ KRMat4 KRMat4::LookAt(const KRVector3 &cameraPos, const KRVector3 &lookAtPos, co matLookat.getPointer()[14] = -KRVector3::Dot(lookat_z_axis, cameraPos); return matLookat; -} \ No newline at end of file +} + +KRMat4 KRMat4::Invert(const KRMat4 &m) +{ + KRMat4 matInvert = m; + matInvert.invert(); + return matInvert; +} + +KRMat4 KRMat4::Transpose(const KRMat4 &m) +{ + KRMat4 matTranspose = m; + matTranspose.transpose(); + return matTranspose; +} diff --git a/KREngine/KREngine/Classes/KRMat4.h b/KREngine/KREngine/Classes/KRMat4.h index 053cd54..13ac8ab 100644 --- a/KREngine/KREngine/Classes/KRMat4.h +++ b/KREngine/KREngine/Classes/KRMat4.h @@ -54,6 +54,7 @@ typedef enum { Z_AXIS } AXIS; +class KRQuaternion; class KRMat4 { @@ -98,10 +99,13 @@ public: void scale(const KRVector3 &v); void scale(GLfloat s); void rotate(GLfloat angle, AXIS axis); + void rotate(const KRQuaternion &q); void bias(); bool invert(); void transpose(); + static KRMat4 Invert(const KRMat4 &m); + static KRMat4 Transpose(const KRMat4 &m); static KRVector3 Dot(const KRMat4 &m, const KRVector3 &v); static float DotW(const KRMat4 &m, const KRVector3 &v); static KRVector3 DotWDiv(const KRMat4 &m, const KRVector3 &v);