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 {
00030         namespace gtx{
00032     namespace quaternion
00033     {
00034                 using namespace gtc::quaternion;
00035 
00038 
00041                 template <typename valType> 
00042                 detail::tvec3<valType> cross(
00043                         detail::tquat<valType> const & q, 
00044                         detail::tvec3<valType> const & v);
00045 
00048                 template <typename valType> 
00049                 detail::tvec3<valType> cross(
00050                         detail::tvec3<valType> const & v, 
00051                         detail::tquat<valType> const & q);
00052 
00056                 template <typename valType> 
00057                 detail::tquat<valType> squad(
00058                         detail::tquat<valType> const & q1, 
00059                         detail::tquat<valType> const & q2, 
00060                         detail::tquat<valType> const & s1, 
00061                         detail::tquat<valType> const & s2, 
00062                         valType const & h);
00063 
00066                 template <typename valType> 
00067                 detail::tquat<valType> intermediate(
00068                         detail::tquat<valType> const & prev, 
00069                         detail::tquat<valType> const & curr, 
00070                         detail::tquat<valType> const & next);
00071 
00074         template <typename valType> 
00075                 detail::tquat<valType> exp(
00076                         detail::tquat<valType> const & q, 
00077                         valType const & exponent);
00078 
00081         template <typename valType> 
00082                 detail::tquat<valType> log(
00083                         detail::tquat<valType> const & q);
00084 
00087         template <typename valType> 
00088                 detail::tquat<valType> pow(
00089                         detail::tquat<valType> const & x, 
00090                         valType const & y);
00091 
00094                 //template <typename valType> 
00095                 //detail::tquat<valType> sqrt(
00096                 //      detail::tquat<valType> const & q);
00097 
00100                 template <typename valType> 
00101                 detail::tvec3<valType> rotate(
00102                         detail::tquat<valType> const & q, 
00103                         detail::tvec3<valType> const & v);
00104 
00107                 template <typename valType> 
00108                 detail::tvec4<valType> rotate(
00109                         detail::tquat<valType> const & q, 
00110                         detail::tvec4<valType> const & v);
00111                 
00114                 template <typename valType> 
00115                 valType angle(
00116                         detail::tquat<valType> const & x);
00117 
00120                 template <typename valType> 
00121                 detail::tvec3<valType> axis(
00122                         detail::tquat<valType> const & x);
00123 
00126                 template <typename valType> 
00127                 detail::tquat<valType> angleAxis(
00128                         valType const & angle, 
00129                         valType const & x, 
00130                         valType const & y, 
00131                         valType const & z);
00132 
00135                 template <typename valType> 
00136                 detail::tquat<valType> angleAxis(
00137                         valType const & angle, 
00138                         detail::tvec3<valType> const & v);
00139 
00142                 template <typename valType> 
00143                 valType extractRealComponent(
00144                         detail::tquat<valType> const & q);
00145 
00148                 template <typename valType> 
00149                 valType roll(
00150                         detail::tquat<valType> const & x);
00151 
00154         template <typename valType> 
00155                 valType pitch(
00156                         detail::tquat<valType> const & x);
00157 
00160                 template <typename valType> 
00161                 valType yaw(
00162                         detail::tquat<valType> const & x);
00163                 
00166                 template <typename valType> 
00167                 detail::tvec3<valType> eularAngles(
00168                         detail::tquat<valType> const & x);
00169 
00172         template <typename valType> 
00173                 detail::tmat3x3<valType> toMat3(
00174                         detail::tquat<valType> const & x){return gtc::quaternion::mat3_cast(x);}
00175 
00178                 template <typename valType> 
00179                 detail::tmat4x4<valType> toMat4(
00180                         detail::tquat<valType> const & x){return gtc::quaternion::mat4_cast(x);}
00181 
00184                 template <typename valType> 
00185                 detail::tquat<valType> toQuat(
00186                         detail::tmat3x3<valType> const & x){return gtc::quaternion::quat_cast(x);}
00187 
00190                 template <typename valType> 
00191                 detail::tquat<valType> toQuat(
00192                         detail::tmat4x4<valType> const & x){return gtc::quaternion::quat_cast(x);}
00193 
00195 
00196     }//namespace quaternion
00197     }//namespace gtx
00198 } //namespace glm
00199 
00200 #include "quaternion.inl"
00201 
00202 namespace glm{using namespace gtx::quaternion;}
00203 
00204 #endif//glm_gtx_quaternion