From 89b273f2ce02eb7474e82ca6b517d16379cd2d80 Mon Sep 17 00:00:00 2001 From: kearwood Date: Thu, 18 Oct 2012 07:32:21 +0000 Subject: [PATCH] Added new convenience functions to KRMat4 --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%40129 --- KREngine/KREngine/Classes/KRMat4.cpp | 22 +++++++++++++++++++++- KREngine/KREngine/Classes/KRMat4.h | 4 ++++ 2 files changed, 25 insertions(+), 1 deletion(-) 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);