GLM Version 0.9.0

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 namespace glm
00025 {
00026         namespace gtx{
00028     namespace quaternion
00029     {
00030                 using namespace gtc::quaternion;
00031 
00034                 template <typename valType> 
00035                 detail::tvec3<valType> cross(
00036                         detail::tquat<valType> const & q, 
00037                         detail::tvec3<valType> const & v);
00038 
00041                 template <typename valType> 
00042                 detail::tvec3<valType> cross(
00043                         detail::tvec3<valType> const & v, 
00044                         detail::tquat<valType> const & q);
00045 
00049                 template <typename valType> 
00050                 detail::tquat<valType> squad(
00051                         detail::tquat<valType> const & q1, 
00052                         detail::tquat<valType> const & q2, 
00053                         detail::tquat<valType> const & s1, 
00054                         detail::tquat<valType> const & s2, 
00055                         valType const & h);
00056 
00059                 template <typename valType> 
00060                 detail::tquat<valType> intermediate(
00061                         detail::tquat<valType> const & prev, 
00062                         detail::tquat<valType> const & curr, 
00063                         detail::tquat<valType> const & next);
00064 
00067         template <typename valType> 
00068                 detail::tquat<valType> exp(
00069                         detail::tquat<valType> const & q, 
00070                         valType const & exponent);
00071 
00074         template <typename valType> 
00075                 detail::tquat<valType> log(
00076                         detail::tquat<valType> const & q);
00077 
00080         template <typename valType> 
00081                 detail::tquat<valType> pow(
00082                         detail::tquat<valType> const & x, 
00083                         valType const & y);
00084 
00087                 //template <typename valType> 
00088                 //detail::tquat<valType> sqrt(
00089                 //      detail::tquat<valType> const & q);
00090 
00093                 template <typename valType> 
00094                 detail::tvec3<valType> rotate(
00095                         detail::tquat<valType> const & q, 
00096                         detail::tvec3<valType> const & v);
00097 
00100                 template <typename valType> 
00101                 detail::tvec4<valType> rotate(
00102                         detail::tquat<valType> const & q, 
00103                         detail::tvec4<valType> const & v);
00104                 
00107                 template <typename valType> 
00108                 valType angle(
00109                         detail::tquat<valType> const & x);
00110 
00113                 template <typename valType> 
00114                 detail::tvec3<valType> axis(
00115                         detail::tquat<valType> const & x);
00116 
00119                 template <typename valType> 
00120                 detail::tquat<valType> angleAxis(
00121                         valType const & angle, 
00122                         valType const & x, 
00123                         valType const & y, 
00124                         valType const & z);
00125 
00128                 template <typename valType> 
00129                 detail::tquat<valType> angleAxis(
00130                         valType const & angle, 
00131                         detail::tvec3<valType> const & v);
00132 
00135                 template <typename valType> 
00136                 valType extractRealComponent(
00137                         detail::tquat<valType> const & q);
00138 
00141                 template <typename valType> 
00142                 valType roll(
00143                         detail::tquat<valType> const & x);
00144 
00147         template <typename valType> 
00148                 valType pitch(
00149                         detail::tquat<valType> const & x);
00150 
00153                 template <typename valType> 
00154                 valType yaw(
00155                         detail::tquat<valType> const & x);
00156                 
00159                 template <typename valType> 
00160                 detail::tvec3<valType> eularAngles(
00161                         detail::tquat<valType> const & x);
00162 
00165         template <typename valType> 
00166                 detail::tmat3x3<valType> toMat3(
00167                         detail::tquat<valType> const & x){return gtc::quaternion::mat3_cast(x);}
00168 
00171                 template <typename valType> 
00172                 detail::tmat4x4<valType> toMat4(
00173                         detail::tquat<valType> const & x){return gtc::quaternion::mat4_cast(x);}
00174 
00177                 template <typename valType> 
00178                 detail::tquat<valType> toQuat(
00179                         detail::tmat3x3<valType> const & x){return gtc::quaternion::quat_cast(x);}
00180 
00183                 template <typename valType> 
00184                 detail::tquat<valType> toQuat(
00185                         detail::tmat4x4<valType> const & x){return gtc::quaternion::quat_cast(x);}
00186 
00187     }//namespace quaternion
00188     }//namespace gtx
00189 } //namespace glm
00190 
00191 #include "quaternion.inl"
00192 
00193 namespace glm{using namespace gtx::quaternion;}
00194 
00195 #endif//glm_gtx_quaternion