From e62817b8252974b8a98393275874ee303840bf13 Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Fri, 12 May 2017 18:49:50 +0500 Subject: 2017-05-12 --- .../include/glm/gtx/rotate_normalized_axis.inl | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 depedencies/include/glm/gtx/rotate_normalized_axis.inl (limited to 'depedencies/include/glm/gtx/rotate_normalized_axis.inl') diff --git a/depedencies/include/glm/gtx/rotate_normalized_axis.inl b/depedencies/include/glm/gtx/rotate_normalized_axis.inl new file mode 100644 index 0000000..dc1b1a8 --- /dev/null +++ b/depedencies/include/glm/gtx/rotate_normalized_axis.inl @@ -0,0 +1,59 @@ +/// @ref gtx_rotate_normalized_axis +/// @file glm/gtx/rotate_normalized_axis.inl + +namespace glm +{ + template + GLM_FUNC_QUALIFIER tmat4x4 rotateNormalizedAxis + ( + tmat4x4 const & m, + T const & angle, + tvec3 const & v + ) + { + T const a = angle; + T const c = cos(a); + T const s = sin(a); + + tvec3 const axis(v); + + tvec3 const temp((static_cast(1) - c) * axis); + + tmat4x4 Rotate(uninitialize); + Rotate[0][0] = c + temp[0] * axis[0]; + Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; + Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; + + Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; + Rotate[1][1] = c + temp[1] * axis[1]; + Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; + + Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; + Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; + Rotate[2][2] = c + temp[2] * axis[2]; + + tmat4x4 Result(uninitialize); + Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; + Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; + Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; + Result[3] = m[3]; + return Result; + } + + template + GLM_FUNC_QUALIFIER tquat rotateNormalizedAxis + ( + tquat const & q, + T const & angle, + tvec3 const & v + ) + { + tvec3 const Tmp(v); + + T const AngleRad(angle); + T const Sin = sin(AngleRad * T(0.5)); + + return q * tquat(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); + //return gtc::quaternion::cross(q, tquat(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin)); + } +}//namespace glm -- cgit v1.2.3