From 039ac92480a09266146fc5b0c9ec67a32a2565ad Mon Sep 17 00:00:00 2001 From: saurabhb17 Date: Wed, 26 Feb 2020 16:04:40 +0530 Subject: Added secondary files --- include/gal/opengl/glm/gtx/rotate_vector.inl | 215 +++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 include/gal/opengl/glm/gtx/rotate_vector.inl (limited to 'include/gal/opengl/glm/gtx/rotate_vector.inl') diff --git a/include/gal/opengl/glm/gtx/rotate_vector.inl b/include/gal/opengl/glm/gtx/rotate_vector.inl new file mode 100644 index 0000000..1ec1717 --- /dev/null +++ b/include/gal/opengl/glm/gtx/rotate_vector.inl @@ -0,0 +1,215 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////// +// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net) +/////////////////////////////////////////////////////////////////////////////////////////////////// +// Created : 2006-11-02 +// Updated : 2009-02-19 +// Licence : This source is under MIT License +// File : glm/gtx/rotate_vector.inl +/////////////////////////////////////////////////////////////////////////////////////////////////// + +namespace glm +{ + template + GLM_FUNC_QUALIFIER detail::tvec2 rotate + ( + detail::tvec2 const & v, + T const & angle + ) + { + detail::tvec2 Result; +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos = cos(radians(angle)); + T const Sin = sin(radians(angle)); +#endif + Result.x = v.x * Cos - v.y * Sin; + Result.y = v.x * Sin + v.y * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 rotate + ( + detail::tvec3 const & v, + T const & angle, + detail::tvec3 const & normal + ) + { + return detail::tmat3x3(glm::rotate(angle, normal)) * v; + } + /* + template + GLM_FUNC_QUALIFIER detail::tvec3 rotateGTX( + const detail::tvec3& x, + T angle, + const detail::tvec3& normal) + { + const T Cos = cos(radians(angle)); + const T Sin = sin(radians(angle)); + return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin; + } + */ + template + GLM_FUNC_QUALIFIER detail::tvec4 rotate + ( + detail::tvec4 const & v, + T const & angle, + detail::tvec3 const & normal + ) + { + return rotate(angle, normal) * v; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 rotateX + ( + detail::tvec3 const & v, + T const & angle + ) + { + detail::tvec3 Result(v); + +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos = cos(radians(angle)); + T const Sin = sin(radians(angle)); +#endif + + Result.y = v.y * Cos - v.z * Sin; + Result.z = v.y * Sin + v.z * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 rotateY + ( + detail::tvec3 const & v, + T const & angle + ) + { + detail::tvec3 Result = v; + +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos(cos(radians(angle))); + T const Sin(sin(radians(angle))); +#endif + + Result.x = v.x * Cos + v.z * Sin; + Result.z = -v.x * Sin + v.z * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec3 rotateZ + ( + detail::tvec3 const & v, + T const & angle + ) + { + detail::tvec3 Result = v; + +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos(cos(radians(angle))); + T const Sin(sin(radians(angle))); +#endif + + Result.x = v.x * Cos - v.y * Sin; + Result.y = v.x * Sin + v.y * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 rotateX + ( + detail::tvec4 const & v, + T const & angle + ) + { + detail::tvec4 Result = v; + +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos(cos(radians(angle))); + T const Sin(sin(radians(angle))); +#endif + + Result.y = v.y * Cos - v.z * Sin; + Result.z = v.y * Sin + v.z * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 rotateY + ( + detail::tvec4 const & v, + T const & angle + ) + { + detail::tvec4 Result = v; + +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos(cos(radians(angle))); + T const Sin(sin(radians(angle))); +#endif + + Result.x = v.x * Cos + v.z * Sin; + Result.z = -v.x * Sin + v.z * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tvec4 rotateZ + ( + detail::tvec4 const & v, + T const & angle + ) + { + detail::tvec4 Result = v; + +#ifdef GLM_FORCE_RADIANS + T const Cos(cos(angle)); + T const Sin(sin(angle)); +#else + T const Cos(cos(radians(angle))); + T const Sin(sin(radians(angle))); +#endif + + Result.x = v.x * Cos - v.y * Sin; + Result.y = v.x * Sin + v.y * Cos; + return Result; + } + + template + GLM_FUNC_QUALIFIER detail::tmat4x4 orientation + ( + detail::tvec3 const & Normal, + detail::tvec3 const & Up + ) + { + if(all(equal(Normal, Up))) + return detail::tmat4x4(T(1)); + + detail::tvec3 RotationAxis = cross(Up, Normal); +# ifdef GLM_FORCE_RADIANS + T Angle = acos(dot(Normal, Up)); +# else + T Angle = degrees(acos(dot(Normal, Up))); +# endif + return rotate(Angle, RotationAxis); + } +}//namespace glm -- cgit