- Main Page
- Related Pages
- Modules
- Files

- File List

gtc/quaternion.hpp
Go to the documentation of this file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 {
53 template <typename T>
54 struct tquat// : public genType<T, tquat>
55 {
56 enum ctor{null};
57
58 typedef T value_type;
59 typedef std::size_t size_type;
60
61 public:
62 value_type x, y, z, w;
63
64 GLM_FUNC_DECL size_type length() const;
65
66 // Constructors
67 tquat();
68 explicit tquat(
69 value_type const & s,
70 glm::detail::tvec3<T> const & v);
71 explicit tquat(
72 value_type const & w,
73 value_type const & x,
74 value_type const & y,
75 value_type const & z);
76
77 // Convertions
78
80 explicit tquat(
81 tvec3<T> const & eulerAngles);
82 explicit tquat(
83 tmat3x3<T> const & m);
84 explicit tquat(
85 tmat4x4<T> const & m);
86
87 // Accesses
88 value_type & operator[](int i);
89 value_type const & operator[](int i) const;
90
91 // Operators
92 tquat<T> & operator*=(value_type const & s);
93 tquat<T> & operator/=(value_type const & s);
94 };
95
96 template <typename T>
97 detail::tquat<T> operator- (
98 detail::tquat<T> const & q);
99
100 template <typename T>
101 detail::tquat<T> operator+ (
102 detail::tquat<T> const & q,
103 detail::tquat<T> const & p);
104
105 template <typename T>
106 detail::tquat<T> operator* (
107 detail::tquat<T> const & q,
108 detail::tquat<T> const & p);
109
110 template <typename T>
111 detail::tvec3<T> operator* (
112 detail::tquat<T> const & q,
113 detail::tvec3<T> const & v);
114
115 template <typename T>
116 detail::tvec3<T> operator* (
117 detail::tvec3<T> const & v,
118 detail::tquat<T> const & q);
119
120 template <typename T>
121 detail::tvec4<T> operator* (
122 detail::tquat<T> const & q,
123 detail::tvec4<T> const & v);
124
125 template <typename T>
126 detail::tvec4<T> operator* (
127 detail::tvec4<T> const & v,
128 detail::tquat<T> const & q);
129
130 template <typename T>
131 detail::tquat<T> operator* (
132 detail::tquat<T> const & q,
133 typename detail::tquat<T>::value_type const & s);
134
135 template <typename T>
136 detail::tquat<T> operator* (
137 typename detail::tquat<T>::value_type const & s,
138 detail::tquat<T> const & q);
139
140 template <typename T>
141 detail::tquat<T> operator/ (
142 detail::tquat<T> const & q,
143 typename detail::tquat<T>::value_type const & s);
144
145 } //namespace detail
146
149
153 template <typename T>
154 T length(
155 detail::tquat<T> const & q);
156
160 template <typename T>
161 detail::tquat<T> normalize(
162 detail::tquat<T> const & q);
163
167 template <typename T>
168 T dot(
169 detail::tquat<T> const & q1,
170 detail::tquat<T> const & q2);
171
175 template <typename T>
176 detail::tquat<T> mix(
177 detail::tquat<T> const & x,
178 detail::tquat<T> const & y,
179 T const & a);
180
184 template <typename T>
185 detail::tquat<T> conjugate(
186 detail::tquat<T> const & q);
187
191 template <typename T>
192 detail::tquat<T> inverse(
193 detail::tquat<T> const & q);
194
202 template <typename T>
203 detail::tquat<T> rotate(
204 detail::tquat<T> const & q,
205 typename detail::tquat<T>::value_type const & angle,
206 detail::tvec3<T> const & axis);
207
211 template <typename T>
212 detail::tvec3<T> eulerAngles(
213 detail::tquat<T> const & x);
214
218 template <typename T>
219 detail::tmat3x3<T> mat3_cast(
220 detail::tquat<T> const & x);
221
225 template <typename T>
226 detail::tmat4x4<T> mat4_cast(
227 detail::tquat<T> const & x);
228
232 template <typename T>
233 detail::tquat<T> quat_cast(
234 detail::tmat3x3<T> const & x);
235
239 template <typename T>
240 detail::tquat<T> quat_cast(
241 detail::tmat4x4<T> const & x);
242
246 template <typename valType>
247 valType angle(
248 detail::tquat<valType> const & x);
249
253 template <typename valType>
254 detail::tvec3<valType> axis(
255 detail::tquat<valType> const & x);
256
265 template <typename valType>
266 detail::tquat<valType> angleAxis(
267 valType const & angle,
268 valType const & x,
269 valType const & y,
270 valType const & z);
271
278 template <typename valType>
279 detail::tquat<valType> angleAxis(
280 valType const & angle,
281 detail::tvec3<valType> const & axis);
282
286 typedef detail::tquat<float> quat;
287
291 typedef detail::tquat<detail::half> hquat;
292
296 typedef detail::tquat<float> fquat;
297
301 typedef detail::tquat<double> dquat;
302
306 typedef detail::tquat<lowp_float> lowp_quat;
307
311 typedef detail::tquat<mediump_float> mediump_quat;
312
316 typedef detail::tquat<highp_float> highp_quat;
317
319 } //namespace glm
320
321 #include "quaternion.inl"
322
323 #endif//GLM_GTC_quaternion