37 # if GLM_HAS_ANONYMOUS_UNION
47 template <
typename T, precision P = defaultp>
52 typedef tvec3<T, P> type;
53 typedef tvec3<bool, P> bool_type;
56 # ifdef GLM_META_PROG_HELPERS
57 static GLM_RELAXED_CONSTEXPR length_t components = 3;
58 static GLM_RELAXED_CONSTEXPR precision prec = P;
59 # endif//GLM_META_PROG_HELPERS
63 # if GLM_HAS_ANONYMOUS_UNION
71 _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, x, y, z)
72 _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, r, g, b)
73 _GLM_SWIZZLE3_2_MEMBERS(T, P, tvec2, s, t, p)
74 _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, x, y, z)
75 _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, r, g, b)
76 _GLM_SWIZZLE3_3_MEMBERS(T, P, tvec3, s, t, p)
77 _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, x, y, z)
78 _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, r, g, b)
79 _GLM_SWIZZLE3_4_MEMBERS(T, P, tvec4, s, t, p)
88 GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P, tvec3, tvec2, tvec3, tvec4)
94 # ifdef GLM_FORCE_SIZE_FUNC
95 typedef size_t size_type;
97 GLM_FUNC_DECL GLM_CONSTEXPR size_type size()
const;
99 GLM_FUNC_DECL T & operator[](size_type i);
100 GLM_FUNC_DECL T
const & operator[](size_type i)
const;
102 typedef length_t length_type;
104 GLM_FUNC_DECL GLM_CONSTEXPR length_type
length()
const;
106 GLM_FUNC_DECL T & operator[](length_type i);
107 GLM_FUNC_DECL T
const & operator[](length_type i)
const;
108 # endif//GLM_FORCE_SIZE_FUNC
112 GLM_FUNC_DECL tvec3() GLM_DEFAULT_CTOR;
113 GLM_FUNC_DECL tvec3(tvec3<T, P> const & v) GLM_DEFAULT;
114 template <precision Q>
115 GLM_FUNC_DECL tvec3(tvec3<T, Q> const & v);
119 GLM_FUNC_DECL explicit tvec3(ctor);
120 GLM_FUNC_DECL explicit tvec3(T const & s);
121 GLM_FUNC_DECL tvec3(T const & a, T const & b, T const & c);
126 template <typename A, typename B, typename C>
127 GLM_FUNC_DECL tvec3(A const & a, B const & b, C const & c);
128 template <typename A, typename B, typename C>
129 GLM_FUNC_DECL tvec3(tvec1<A, P> const & a, tvec1<B, P> const & b, tvec1<C, P> const & c);
134 template <typename A, typename B, precision Q>
135 GLM_FUNC_DECL explicit tvec3(tvec2<A, Q> const & a, B const & b);
137 template <typename A, typename B, precision Q>
138 GLM_FUNC_DECL explicit tvec3(tvec2<A, Q> const & a, tvec1<B, Q> const & b);
140 template <typename A, typename B, precision Q>
141 GLM_FUNC_DECL explicit tvec3(A const & a, tvec2<B, Q> const & b);
143 template <typename A, typename B, precision Q>
144 GLM_FUNC_DECL explicit tvec3(tvec1<A, Q> const & a, tvec2<B, Q> const & b);
146 template <typename U, precision Q>
147 GLM_FUNC_DECL explicit tvec3(tvec4<U, Q> const & v);
150 template <typename U, precision Q>
151 GLM_FUNC_DECL GLM_EXPLICIT tvec3(tvec3<U, Q> const & v);
155 # if GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
156 template <
int E0,
int E1,
int E2>
157 GLM_FUNC_DECL tvec3(detail::_swizzle<3, T, P, tvec3<T, P>, E0, E1, E2, -1>
const & that)
162 template <
int E0,
int E1>
163 GLM_FUNC_DECL tvec3(detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2>
const & v, T
const & s)
165 *
this = tvec3<T, P>(v(), s);
168 template <
int E0,
int E1>
169 GLM_FUNC_DECL tvec3(T
const & s, detail::_swizzle<2, T, P, tvec2<T, P>, E0, E1, -1, -2>
const & v)
171 *
this = tvec3<T, P>(s, v());
173 # endif// GLM_HAS_ANONYMOUS_UNION && defined(GLM_SWIZZLE)
177 GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<T, P>
const & v) GLM_DEFAULT;
179 template <
typename U>
180 GLM_FUNC_DECL tvec3<T, P> & operator=(tvec3<U, P>
const & v);
181 template <
typename U>
182 GLM_FUNC_DECL tvec3<T, P> & operator+=(U s);
183 template <
typename U>
184 GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec1<U, P>
const & v);
185 template <
typename U>
186 GLM_FUNC_DECL tvec3<T, P> & operator+=(tvec3<U, P>
const & v);
187 template <
typename U>
188 GLM_FUNC_DECL tvec3<T, P> & operator-=(U s);
189 template <
typename U>
190 GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec1<U, P>
const & v);
191 template <
typename U>
192 GLM_FUNC_DECL tvec3<T, P> & operator-=(tvec3<U, P>
const & v);
193 template <
typename U>
194 GLM_FUNC_DECL tvec3<T, P> & operator*=(U s);
195 template <
typename U>
196 GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec1<U, P>
const & v);
197 template <
typename U>
198 GLM_FUNC_DECL tvec3<T, P> & operator*=(tvec3<U, P>
const & v);
199 template <
typename U>
200 GLM_FUNC_DECL tvec3<T, P> & operator/=(U s);
201 template <
typename U>
202 GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec1<U, P>
const & v);
203 template <
typename U>
204 GLM_FUNC_DECL tvec3<T, P> & operator/=(tvec3<U, P>
const & v);
208 GLM_FUNC_DECL tvec3<T, P> & operator++();
209 GLM_FUNC_DECL tvec3<T, P> & operator--();
210 GLM_FUNC_DECL tvec3<T, P> operator++(
int);
211 GLM_FUNC_DECL tvec3<T, P> operator--(
int);
215 template <
typename U>
216 GLM_FUNC_DECL tvec3<T, P> & operator%=(U s);
217 template <
typename U>
218 GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec1<U, P>
const & v);
219 template <
typename U>
220 GLM_FUNC_DECL tvec3<T, P> & operator%=(tvec3<U, P>
const & v);
221 template <
typename U>
222 GLM_FUNC_DECL tvec3<T, P> & operator&=(U s);
223 template <
typename U>
224 GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec1<U, P>
const & v);
225 template <
typename U>
226 GLM_FUNC_DECL tvec3<T, P> & operator&=(tvec3<U, P>
const & v);
227 template <
typename U>
228 GLM_FUNC_DECL tvec3<T, P> & operator|=(U s);
229 template <
typename U>
230 GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec1<U, P>
const & v);
231 template <
typename U>
232 GLM_FUNC_DECL tvec3<T, P> & operator|=(tvec3<U, P>
const & v);
233 template <
typename U>
234 GLM_FUNC_DECL tvec3<T, P> & operator^=(U s);
235 template <
typename U>
236 GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec1<U, P>
const & v);
237 template <
typename U>
238 GLM_FUNC_DECL tvec3<T, P> & operator^=(tvec3<U, P>
const & v);
239 template <
typename U>
240 GLM_FUNC_DECL tvec3<T, P> & operator<<=(U s);
241 template <
typename U>
242 GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec1<U, P>
const & v);
243 template <
typename U>
244 GLM_FUNC_DECL tvec3<T, P> & operator<<=(tvec3<U, P>
const & v);
245 template <
typename U>
246 GLM_FUNC_DECL tvec3<T, P> & operator>>=(U s);
247 template <
typename U>
248 GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec1<U, P>
const & v);
249 template <
typename U>
250 GLM_FUNC_DECL tvec3<T, P> & operator>>=(tvec3<U, P>
const & v);
255 template <
typename T, precision P>
256 GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P>
const & v);
260 template <
typename T, precision P>
261 GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P>
const & v, T
const & s);
263 template <
typename T, precision P>
264 GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
266 template <
typename T, precision P>
267 GLM_FUNC_DECL tvec3<T, P> operator+(T
const & s, tvec3<T, P>
const & v);
269 template <
typename T, precision P>
270 GLM_FUNC_DECL tvec3<T, P> operator+(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
272 template <
typename T, precision P>
273 GLM_FUNC_DECL tvec3<T, P> operator+(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
275 template <
typename T, precision P>
276 GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P>
const & v, T
const & s);
278 template <
typename T, precision P>
279 GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
281 template <
typename T, precision P>
282 GLM_FUNC_DECL tvec3<T, P> operator-(T
const & s, tvec3<T, P>
const & v);
284 template <
typename T, precision P>
285 GLM_FUNC_DECL tvec3<T, P> operator-(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
287 template <
typename T, precision P>
288 GLM_FUNC_DECL tvec3<T, P> operator-(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
290 template <
typename T, precision P>
291 GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P>
const & v, T
const & s);
293 template <
typename T, precision P>
294 GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
296 template <
typename T, precision P>
297 GLM_FUNC_DECL tvec3<T, P> operator*(T
const & s, tvec3<T, P>
const & v);
299 template <
typename T, precision P>
300 GLM_FUNC_DECL tvec3<T, P> operator*(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
302 template <
typename T, precision P>
303 GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
305 template <
typename T, precision P>
306 GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P>
const & v, T
const & s);
308 template <
typename T, precision P>
309 GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
311 template <
typename T, precision P>
312 GLM_FUNC_DECL tvec3<T, P> operator/(T
const & s, tvec3<T, P>
const & v);
314 template <
typename T, precision P>
315 GLM_FUNC_DECL tvec3<T, P> operator/(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
317 template <
typename T, precision P>
318 GLM_FUNC_DECL tvec3<T, P> operator/(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
320 template <
typename T, precision P>
321 GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P>
const & v, T
const & s);
323 template <
typename T, precision P>
324 GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
326 template <
typename T, precision P>
327 GLM_FUNC_DECL tvec3<T, P> operator%(T
const & s, tvec3<T, P>
const & v);
329 template <
typename T, precision P>
330 GLM_FUNC_DECL tvec3<T, P> operator%(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
332 template <
typename T, precision P>
333 GLM_FUNC_DECL tvec3<T, P> operator%(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
335 template <
typename T, precision P>
336 GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P>
const & v, T
const & s);
338 template <
typename T, precision P>
339 GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
341 template <
typename T, precision P>
342 GLM_FUNC_DECL tvec3<T, P> operator&(T
const & s, tvec3<T, P>
const & v);
344 template <
typename T, precision P>
345 GLM_FUNC_DECL tvec3<T, P> operator&(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
347 template <
typename T, precision P>
348 GLM_FUNC_DECL tvec3<T, P> operator&(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
350 template <
typename T, precision P>
351 GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P>
const & v, T
const & s);
353 template <
typename T, precision P>
354 GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
356 template <
typename T, precision P>
357 GLM_FUNC_DECL tvec3<T, P> operator|(T
const & s, tvec3<T, P>
const & v);
359 template <
typename T, precision P>
360 GLM_FUNC_DECL tvec3<T, P> operator|(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
362 template <
typename T, precision P>
363 GLM_FUNC_DECL tvec3<T, P> operator|(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
365 template <
typename T, precision P>
366 GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P>
const & v, T
const & s);
368 template <
typename T, precision P>
369 GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
371 template <
typename T, precision P>
372 GLM_FUNC_DECL tvec3<T, P> operator^(T
const & s, tvec3<T, P>
const & v);
374 template <
typename T, precision P>
375 GLM_FUNC_DECL tvec3<T, P> operator^(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
377 template <
typename T, precision P>
378 GLM_FUNC_DECL tvec3<T, P> operator^(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
380 template <
typename T, precision P>
381 GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P>
const & v, T
const & s);
383 template <
typename T, precision P>
384 GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
386 template <
typename T, precision P>
387 GLM_FUNC_DECL tvec3<T, P> operator<<(T const & s, tvec3<T, P>
const & v);
389 template <
typename T, precision P>
390 GLM_FUNC_DECL tvec3<T, P> operator<<(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
392 template <
typename T, precision P>
393 GLM_FUNC_DECL tvec3<T, P> operator<<(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
395 template <
typename T, precision P>
396 GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P>
const & v, T
const & s);
398 template <
typename T, precision P>
399 GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P>
const & v, tvec1<T, P>
const & s);
401 template <
typename T, precision P>
402 GLM_FUNC_DECL tvec3<T, P> operator>>(T
const & s, tvec3<T, P>
const & v);
404 template <
typename T, precision P>
405 GLM_FUNC_DECL tvec3<T, P> operator>>(tvec1<T, P>
const & s, tvec3<T, P>
const & v);
407 template <
typename T, precision P>
408 GLM_FUNC_DECL tvec3<T, P> operator>>(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
410 template <
typename T, precision P>
411 GLM_FUNC_DECL tvec3<T, P> operator~(tvec3<T, P>
const & v);
415 template <
typename T, precision P>
416 GLM_FUNC_DECL
bool operator==(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
418 template <
typename T, precision P>
419 GLM_FUNC_DECL
bool operator!=(tvec3<T, P>
const & v1, tvec3<T, P>
const & v2);
422 #ifndef GLM_EXTERNAL_TEMPLATE
423 #include "type_vec3.inl"
424 #endif//GLM_EXTERNAL_TEMPLATE
GLM_FUNC_DECL T length(vecType< T, P > const &x)
Returns the length of x, i.e., sqrt(x * x).
OpenGL Mathematics (glm.g-truc.net)
OpenGL Mathematics (glm.g-truc.net)
OpenGL Mathematics (glm.g-truc.net)