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 {
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
00095
00096
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 }
00197 }
00198 }
00199
00200 #include "quaternion.inl"
00201
00202 namespace glm{using namespace gtx::quaternion;}
00203
00204 #endif//glm_gtx_quaternion