00001
00002
00004
00005
00006
00007
00009
00010
00012
00013
00014
00016
00017 #ifndef glm_gtx_quaternion
00018 #define glm_gtx_quaternion
00019
00020
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
00093
00094
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 }
00210 }
00211 }
00212
00213 #include "quaternion.inl"
00214
00215 namespace glm{using namespace gtx::quaternion;}
00216
00217 #endif//glm_gtx_quaternion