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