From 1f00f86225dbc09ec223c949eb3ffe95fc199116 Mon Sep 17 00:00:00 2001 From: kearwood Date: Wed, 3 Oct 2012 21:00:05 +0000 Subject: [PATCH] Added rotationMatrix method to KRQuaternion --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%40114 --- KREngine/KREngine/Classes/KRQuaternion.cpp | 18 ++++++++++++++++++ KREngine/KREngine/Classes/KRQuaternion.h | 2 ++ 2 files changed, 20 insertions(+) diff --git a/KREngine/KREngine/Classes/KRQuaternion.cpp b/KREngine/KREngine/Classes/KRQuaternion.cpp index 75db472..60e935c 100644 --- a/KREngine/KREngine/Classes/KRQuaternion.cpp +++ b/KREngine/KREngine/Classes/KRQuaternion.cpp @@ -233,3 +233,21 @@ void KRQuaternion::conjugate() { m_val[3] = -m_val[3]; } +KRMat4 KRQuaternion::rotationMatrix() const { + KRMat4 matRotate; + + matRotate.getPointer()[0] = 1.0 - 2.0 * (m_val[2] * m_val[2] + m_val[3] * m_val[3]); + matRotate.getPointer()[1] = 2.0 * (m_val[1] * m_val[2] - m_val[0] * m_val[3]); + matRotate.getPointer()[2] = 2.0 * (m_val[0] * m_val[2] + m_val[1] * m_val[3]); + + matRotate.getPointer()[4] = 2.0 * (m_val[1] * m_val[2] + m_val[0] * m_val[3]); + matRotate.getPointer()[5] = 1.0 - 2.0 * (m_val[1] * m_val[1] + m_val[3] * m_val[3]); + matRotate.getPointer()[6] = 2.0 * (m_val[2] * m_val[3] - m_val[0] * m_val[1]); + + matRotate.getPointer()[8] = 2.0 * (m_val[1] * m_val[3] - m_val[0] * m_val[2]); + matRotate.getPointer()[9] = 2.0 * (m_val[0] * m_val[1] + m_val[2] * m_val[3]); + matRotate.getPointer()[10] = 1.0 - 2.0 * (m_val[1] * m_val[1] + m_val[2] * m_val[2]); + + return matRotate; +} + diff --git a/KREngine/KREngine/Classes/KRQuaternion.h b/KREngine/KREngine/Classes/KRQuaternion.h index c50a2d9..a68f732 100644 --- a/KREngine/KREngine/Classes/KRQuaternion.h +++ b/KREngine/KREngine/Classes/KRQuaternion.h @@ -34,6 +34,7 @@ #include #import "KREngine-common.h" +#import "KRMat4.h" class KRVector3; @@ -69,6 +70,7 @@ public: void setEuler(const KRVector3 &euler); KRVector3 euler() const; + KRMat4 rotationMatrix() const; void normalize(); static KRQuaternion Normalize(const KRQuaternion &v1);