quaternion.hpp
00001 
00002 // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
00004 // Created : 2005-12-21
00005 // Updated : 2009-05-21
00006 // Licence : This source is under MIT License
00007 // File    : glm/gtx/quaternion.hpp
00009 // Dependency:
00010 // - GLM core
00012 // ToDo:
00013 // - Study constructors with angles and axis
00014 // - Study constructors with vec3 that are the imaginary component of quaternion
00016 
00017 #ifndef glm_gtx_quaternion
00018 #define glm_gtx_quaternion
00019 
00020 // Dependency:
00021 #include "../glm.hpp"
00022 #include "../gtc/quaternion.hpp"
00023 
00024 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
00025 #       pragma message("GLM: GLM_GTX_quaternion extension included")
00026 #endif
00027 
00028 namespace glm{
00029 namespace gtx{
00030 namespace quaternion 
00031 {
00032         using namespace gtc::quaternion;
00033 
00036 
00039         template <typename valType> 
00040         detail::tvec3<valType> cross(
00041                 detail::tquat<valType> const & q, 
00042                 detail::tvec3<valType> const & v);
00043 
00046         template <typename valType> 
00047         detail::tvec3<valType> cross(
00048                 detail::tvec3<valType> const & v, 
00049                 detail::tquat<valType> const & q);
00050 
00054         template <typename valType> 
00055         detail::tquat<valType> squad(
00056                 detail::tquat<valType> const & q1, 
00057                 detail::tquat<valType> const & q2, 
00058                 detail::tquat<valType> const & s1, 
00059                 detail::tquat<valType> const & s2, 
00060                 valType const & h);
00061 
00064         template <typename valType> 
00065         detail::tquat<valType> intermediate(
00066                 detail::tquat<valType> const & prev, 
00067                 detail::tquat<valType> const & curr, 
00068                 detail::tquat<valType> const & next);
00069 
00072     template <typename valType> 
00073         detail::tquat<valType> exp(
00074                 detail::tquat<valType> const & q, 
00075                 valType const & exponent);
00076 
00079     template <typename valType> 
00080         detail::tquat<valType> log(
00081                 detail::tquat<valType> const & q);
00082 
00085     template <typename valType> 
00086         detail::tquat<valType> pow(
00087                 detail::tquat<valType> const & x, 
00088                 valType const & y);
00089 
00092         //template <typename valType> 
00093         //detail::tquat<valType> sqrt(
00094         //      detail::tquat<valType> const & q);
00095 
00098         template <typename valType> 
00099         detail::tvec3<valType> rotate(
00100                 detail::tquat<valType> const & q, 
00101                 detail::tvec3<valType> const & v);
00102 
00105         template <typename valType> 
00106         detail::tvec4<valType> rotate(
00107                 detail::tquat<valType> const & q, 
00108                 detail::tvec4<valType> const & v);
00109                 
00112         template <typename valType> 
00113         valType angle(
00114                 detail::tquat<valType> const & x);
00115 
00118         template <typename valType> 
00119         detail::tvec3<valType> axis(
00120                 detail::tquat<valType> const & x);
00121 
00124         template <typename valType> 
00125         detail::tquat<valType> angleAxis(
00126                 valType const & angle, 
00127                 valType const & x, 
00128                 valType const & y, 
00129                 valType const & z);
00130 
00133         template <typename valType> 
00134         detail::tquat<valType> angleAxis(
00135                 valType const & angle, 
00136                 detail::tvec3<valType> const & axis);
00137 
00140         template <typename valType> 
00141         valType extractRealComponent(
00142                 detail::tquat<valType> const & q);
00143 
00146         template <typename valType> 
00147         valType roll(
00148                 detail::tquat<valType> const & x);
00149 
00152     template <typename valType> 
00153         valType pitch(
00154                 detail::tquat<valType> const & x);
00155 
00158         template <typename valType> 
00159         valType yaw(
00160                 detail::tquat<valType> const & x);
00161                 
00164         template <typename valType> 
00165         detail::tvec3<valType> eulerAngles(
00166                 detail::tquat<valType> const & x);
00167 
00170     template <typename valType> 
00171         detail::tmat3x3<valType> toMat3(
00172                 detail::tquat<valType> const & x){return gtc::quaternion::mat3_cast(x);}
00173 
00176         template <typename valType> 
00177         detail::tmat4x4<valType> toMat4(
00178                 detail::tquat<valType> const & x){return gtc::quaternion::mat4_cast(x);}
00179 
00182         template <typename valType> 
00183         detail::tquat<valType> toQuat(
00184                 detail::tmat3x3<valType> const & x){return gtc::quaternion::quat_cast(x);}
00185 
00188         template <typename valType> 
00189         detail::tquat<valType> toQuat(
00190                 detail::tmat4x4<valType> const & x){return gtc::quaternion::quat_cast(x);}
00191 
00194         template <typename T>
00195         detail::tquat<T> shortMix(
00196                 detail::tquat<T> const & x, 
00197                 detail::tquat<T> const & y, 
00198                 T const & a);
00199 
00202         template <typename T>
00203         detail::tquat<T> fastMix(
00204                 detail::tquat<T> const & x, 
00205                 detail::tquat<T> const & y, 
00206                 T const & a);
00207 
00209 }//namespace quaternion
00210 }//namespace gtx
00211 } //namespace glm
00212 
00213 #include "quaternion.inl"
00214 
00215 namespace glm{using namespace gtx::quaternion;}
00216 
00217 #endif//glm_gtx_quaternion