PSMoveService
quaternion.hpp
Go to the documentation of this file.
1 
39 #ifndef GLM_GTC_quaternion
40 #define GLM_GTC_quaternion GLM_VERSION
41 
42 // Dependency:
43 #include "../glm.hpp"
44 #include "../gtc/half_float.hpp"
45 
46 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
47 # pragma message("GLM: GLM_GTC_quaternion extension included")
48 #endif
49 
50 namespace glm{
51 namespace detail
52 {
56  template <typename T>
57  struct tquat// : public genType<T, tquat>
58  {
59  enum ctor{null};
60 
61  typedef T value_type;
62  typedef std::size_t size_type;
63 
64  public:
65  value_type x, y, z, w;
66 
67  GLM_FUNC_DECL size_type length() const;
68 
69  // Constructors
70  tquat();
71  explicit tquat(
72  value_type const & s,
73  glm::detail::tvec3<T> const & v);
74  explicit tquat(
75  value_type const & w,
76  value_type const & x,
77  value_type const & y,
78  value_type const & z);
79 
80  // Convertions
81  //explicit tquat(valType const & pitch, valType const & yaw, valType const & roll);
83  explicit tquat(
84  tvec3<T> const & eulerAngles);
85  explicit tquat(
86  tmat3x3<T> const & m);
87  explicit tquat(
88  tmat4x4<T> const & m);
89 
90  // Accesses
91  value_type & operator[](int i);
92  value_type const & operator[](int i) const;
93 
94  // Operators
95  tquat<T> & operator*=(value_type const & s);
96  tquat<T> & operator/=(value_type const & s);
97  };
98 
99  template <typename T>
100  detail::tquat<T> operator- (
101  detail::tquat<T> const & q);
102 
103  template <typename T>
104  detail::tquat<T> operator+ (
105  detail::tquat<T> const & q,
106  detail::tquat<T> const & p);
107 
108  template <typename T>
109  detail::tquat<T> operator* (
110  detail::tquat<T> const & q,
111  detail::tquat<T> const & p);
112 
113  template <typename T>
114  detail::tvec3<T> operator* (
115  detail::tquat<T> const & q,
116  detail::tvec3<T> const & v);
117 
118  template <typename T>
119  detail::tvec3<T> operator* (
120  detail::tvec3<T> const & v,
121  detail::tquat<T> const & q);
122 
123  template <typename T>
124  detail::tvec4<T> operator* (
125  detail::tquat<T> const & q,
126  detail::tvec4<T> const & v);
127 
128  template <typename T>
129  detail::tvec4<T> operator* (
130  detail::tvec4<T> const & v,
131  detail::tquat<T> const & q);
132 
133  template <typename T>
134  detail::tquat<T> operator* (
135  detail::tquat<T> const & q,
136  typename detail::tquat<T>::value_type const & s);
137 
138  template <typename T>
139  detail::tquat<T> operator* (
140  typename detail::tquat<T>::value_type const & s,
141  detail::tquat<T> const & q);
142 
143  template <typename T>
144  detail::tquat<T> operator/ (
145  detail::tquat<T> const & q,
146  typename detail::tquat<T>::value_type const & s);
147 
148 } //namespace detail
149 
152 
156  template <typename T>
157  T length(
158  detail::tquat<T> const & q);
159 
163  template <typename T>
165  detail::tquat<T> const & q);
166 
170  template <typename T>
171  T dot(
172  detail::tquat<T> const & q1,
173  detail::tquat<T> const & q2);
174 
178  template <typename T>
180  detail::tquat<T> const & x,
181  detail::tquat<T> const & y,
182  T const & a);
183 
187  template <typename T>
189  detail::tquat<T> const & q);
190 
194  template <typename T>
196  detail::tquat<T> const & q);
197 
201  template <typename T>
203  detail::tquat<T> const & q,
204  typename detail::tquat<T>::value_type const & angle,
205  detail::tvec3<T> const & v);
206 
210  template <typename T>
212  detail::tquat<T> const & x);
213 
217  template <typename T>
219  detail::tquat<T> const & x);
220 
224  template <typename T>
226  detail::tquat<T> const & x);
227 
231  template <typename T>
233  detail::tmat3x3<T> const & x);
234 
238  template <typename T>
240  detail::tmat4x4<T> const & x);
241 
246 
251 
256 
261 
266 
271 
276 
278 } //namespace glm
279 
280 #include "quaternion.inl"
281 
282 #endif//GLM_GTC_quaternion
OpenGL Mathematics (glm.g-truc.net)
detail::tquat< mediump_float > mediump_quat
Quaternion of medium precision floating-point numbers.
Definition: quaternion.hpp:270
detail::tquat< T > conjugate(detail::tquat< T > const &q)
Returns the q conjugate.
Definition: quaternion.inl:460
detail::tquat< highp_float > highp_quat
Quaternion of high precision floating-point numbers.
Definition: quaternion.hpp:275
detail::tmat4x4< T > mat4_cast(detail::tquat< T > const &x)
Converts a quaternion to a 4 * 4 matrix.
Definition: quaternion.inl:535
Definition: type_mat2x2.hpp:45
Definition: _detail.hpp:38
detail::tvec3< T > eulerAngles(detail::tquat< T > const &x)
Returns euler angles, yitch as x, yaw as y, roll as z.
Definition: quaternion.inl:505
detail::tquat< float > quat
Quaternion of floating-point numbers.
Definition: quaternion.hpp:245
detail::tquat< double > dquat
Quaternion of double-precision floating-point numbers.
Definition: quaternion.hpp:260
detail::tquat< float > fquat
Quaternion of single-precision floating-point numbers.
Definition: quaternion.hpp:255
detail::tquat< T > rotate(detail::tquat< T > const &q, typename detail::tquat< T >::value_type const &angle, detail::tvec3< T > const &v)
Rotates a quaternion from an vector of 3 components axis and an angle expressed in degrees...
Definition: quaternion.inl:478
Template for quaternion.
Definition: quaternion.hpp:57
Definition: type_mat2x2.hpp:39
detail::tquat< detail::half > hquat
Quaternion of half-precision floating-point numbers.
Definition: quaternion.hpp:250
Definition: type_mat2x2.hpp:40
detail::tquat< T > quat_cast(detail::tmat4x4< T > const &x)
Converts a 4 * 4 matrix to a quaternion.
Definition: quaternion.inl:607
detail::tquat< T > mix(detail::tquat< T > const &x, detail::tquat< T > const &y, T const &a)
Returns a SLERP interpolated quaternion of x and y according a.
Definition: quaternion.inl:448
Definition: type_mat2x2.hpp:49
detail::tquat< T > inverse(detail::tquat< T > const &q)
Returns the q inverse.
Definition: quaternion.inl:469
detail::tquat< T > normalize(detail::tquat< T > const &q)
Returns the normalized quaternion.
Definition: quaternion.inl:331
detail::tmat3x3< T > mat3_cast(detail::tquat< T > const &x)
Converts a quaternion to a 3 * 3 matrix.
Definition: quaternion.inl:514
detail::tquat< lowp_float > lowp_quat
Quaternion of low precision floating-point numbers.
Definition: quaternion.hpp:265
T dot(detail::tquat< T > const &q1, detail::tquat< T > const &q2)
Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...
Definition: quaternion.inl:344