40 #ifndef GLM_GTC_quaternion 
   41 #define GLM_GTC_quaternion GLM_VERSION 
   45 #include "../gtc/half_float.hpp" 
   46 #include "../gtc/constants.hpp" 
   48 #if(defined(GLM_MESSAGES) && !defined(glm_ext)) 
   49 #       pragma message("GLM: GLM_GTC_quaternion extension included") 
   61                 typedef std::size_t size_type;
 
   64                 value_type x, y, z, w;
 
   66                 GLM_FUNC_DECL size_type 
length() 
const;
 
   72                         glm::detail::tvec3<T> 
const & v);
 
   77                         value_type 
const & z);
 
   85                         tmat3x3<T> 
const & m);
 
   87                         tmat4x4<T> 
const & m);
 
   90                 value_type & operator[](
int i);
 
   91                 value_type 
const & operator[](
int i) 
const;
 
   94                 tquat<T> & operator*=(value_type 
const & s);
 
   95                 tquat<T> & operator/=(value_type 
const & s);
 
   99         detail::tquat<T> operator- (
 
  100                 detail::tquat<T> 
const & q);
 
  102         template <
typename T> 
 
  103         detail::tquat<T> operator+ ( 
 
  104                 detail::tquat<T> 
const & q, 
 
  105                 detail::tquat<T> 
const & p); 
 
  107         template <
typename T> 
 
  108         detail::tquat<T> operator* ( 
 
  109                 detail::tquat<T> 
const & q, 
 
  110                 detail::tquat<T> 
const & p); 
 
  112         template <
typename T> 
 
  113         detail::tvec3<T> operator* (
 
  114                 detail::tquat<T> 
const & q, 
 
  115                 detail::tvec3<T> 
const & v);
 
  117         template <
typename T> 
 
  118         detail::tvec3<T> operator* (
 
  119                 detail::tvec3<T> 
const & v,
 
  120                 detail::tquat<T> 
const & q);
 
  122         template <
typename T> 
 
  123         detail::tvec4<T> operator* (
 
  124                 detail::tquat<T> 
const & q, 
 
  125                 detail::tvec4<T> 
const & v);
 
  127         template <
typename T> 
 
  128         detail::tvec4<T> operator* (
 
  129                 detail::tvec4<T> 
const & v,
 
  130                 detail::tquat<T> 
const & q);
 
  132         template <
typename T> 
 
  133         detail::tquat<T> operator* (
 
  134                 detail::tquat<T> 
const & q, 
 
  135                 typename detail::tquat<T>::value_type 
const & s);
 
  137         template <
typename T> 
 
  138         detail::tquat<T> operator* (
 
  139                 typename detail::tquat<T>::value_type 
const & s,
 
  140                 detail::tquat<T> 
const & q);
 
  142         template <
typename T> 
 
  143         detail::tquat<T> operator/ (
 
  144                 detail::tquat<T> 
const & q, 
 
  145                 typename detail::tquat<T>::value_type 
const & s);
 
  155         template <
typename T> 
 
  157                 detail::tquat<T> 
const & q);
 
  162         template <
typename T> 
 
  164                 detail::tquat<T> 
const & q);
 
  169         template <
typename T> 
 
  171                 detail::tquat<T> 
const & q1, 
 
  172                 detail::tquat<T> 
const & q2);
 
  184         template <
typename T> 
 
  185         detail::tquat<T> 
mix(
 
  186                 detail::tquat<T> 
const & x, 
 
  187                 detail::tquat<T> 
const & y, 
 
  198         template <
typename T> 
 
  199         detail::tquat<T> 
lerp(
 
  200                 detail::tquat<T> 
const & x, 
 
  201                 detail::tquat<T> 
const & y, 
 
  212         template <
typename T> 
 
  213         detail::tquat<T> 
slerp(
 
  214                 detail::tquat<T> 
const & x, 
 
  215                 detail::tquat<T> 
const & y, 
 
  221         template <
typename T> 
 
  223                 detail::tquat<T> 
const & q);
 
  228         template <
typename T> 
 
  230                 detail::tquat<T> 
const & q);
 
  239         template <
typename T> 
 
  241                 detail::tquat<T> 
const & q, 
 
  242                 typename detail::tquat<T>::value_type 
const & 
angle, 
 
  243                 detail::tvec3<T> 
const & 
axis);
 
  248         template <
typename T> 
 
  250                 detail::tquat<T> 
const & x);
 
  255         template <
typename valType> 
 
  257                 detail::tquat<valType> 
const & x);
 
  262         template <
typename valType> 
 
  264                 detail::tquat<valType> 
const & x);
 
  269         template <
typename valType> 
 
  271                 detail::tquat<valType> 
const & x);
 
  276         template <
typename T> 
 
  278                 detail::tquat<T> 
const & x);
 
  283         template <
typename T> 
 
  285                 detail::tquat<T> 
const & x);
 
  290         template <
typename T> 
 
  292                 detail::tmat3x3<T> 
const & x);
 
  297         template <
typename T> 
 
  299                 detail::tmat4x4<T> 
const & x);
 
  304         template <
typename valType> 
 
  306                 detail::tquat<valType> 
const & x);
 
  311         template <
typename valType> 
 
  312         detail::tvec3<valType> 
axis(
 
  313                 detail::tquat<valType> 
const & x);
 
  323         template <
typename valType> 
 
  325                 valType 
const & 
angle, 
 
  336         template <
typename valType> 
 
  338                 valType 
const & 
angle, 
 
  339                 detail::tvec3<valType> 
const & 
axis);
 
  344         typedef detail::tquat<float> 
quat;
 
  349         typedef detail::tquat<detail::half>     
hquat;
 
  359         typedef detail::tquat<double>   
dquat;
 
  379 #include "quaternion.inl" 
  381 #endif//GLM_GTC_quaternion