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);