6 #include "qualifier.hpp"     7 #if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR     8 #   include "_swizzle.hpp"     9 #elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION    10 #   include "_swizzle_func.hpp"    16     template<
typename T, qualifier Q>
    22         typedef vec<3, T, Q> type;
    23         typedef vec<3, bool, Q> bool_type;
    27 #       if GLM_CONFIG_XYZW_ONLY    29 #       elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE    36                 typename detail::storage<3, T, detail::is_aligned<Q>::value>::type data;
    38 #               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR    39                     GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z)
    40                     GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b)
    41                     GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p)
    42                     GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z)
    43                     GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b)
    44                     GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p)
    45                     GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z)
    46                     GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b)
    47                     GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p)
    55 #           if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION    56                 GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q)
    57 #           endif//GLM_CONFIG_SWIZZLE    63         typedef length_t length_type;
    64         GLM_FUNC_DECL 
static GLM_CONSTEXPR length_type 
length(){
return 3;}
    66         GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);
    67         GLM_FUNC_DECL GLM_CONSTEXPR T 
const& operator[](length_type i) 
const;
    71         GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;
    72         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;
    74         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v);
    78         GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);
    79         GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c);
    83         template<typename U, qualifier P>
    84         GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);
    87         template<typename X, typename Y, typename Z>
    88         GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z);
    89         template<typename X, typename Y, typename Z>
    90         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z);
    91         template<typename X, typename Y, typename Z>
    92         GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z);
    93         template<typename X, typename Y, typename Z>
    94         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z);
    95         template<typename X, typename Y, typename Z>
    96         GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z);
    97         template<typename X, typename Y, typename Z>
    98         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z);
    99         template<typename X, typename Y, typename Z>
   100         GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);
   101         template<typename X, typename Y, typename Z>
   102         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);
   107         template<typename A, typename B, qualifier P>
   108         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z);
   110         template<typename A, typename B, qualifier P>
   111         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z);
   113         template<typename A, typename B, qualifier P>
   114         GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz);
   116         template<typename A, typename B, qualifier P>
   117         GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz);
   119         template<typename U, qualifier P>
   120         GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);
   123         template<typename U, qualifier P>
   124         GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);
   127 #       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR   128             template<
int E0, 
int E1, 
int E2>
   129             GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> 
const& that)
   134             template<
int E0, 
int E1>
   135             GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> 
const& v, T 
const& scalar)
   137                 *
this = vec(v(), scalar);
   140             template<
int E0, 
int E1>
   141             GLM_FUNC_DECL GLM_CONSTEXPR vec(T 
const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> 
const& v)
   143                 *
this = vec(scalar, v());
   145 #       endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR   149         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> 
const& v) GLM_DEFAULT;
   152         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> 
const& v);
   154         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar);
   156         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> 
const& v);
   158         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> 
const& v);
   160         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar);
   162         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> 
const& v);
   164         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> 
const& v);
   166         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar);
   168         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> 
const& v);
   170         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> 
const& v);
   172         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar);
   174         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> 
const& v);
   176         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> 
const& v);
   180         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++();
   181         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--();
   182         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(
int);
   183         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(
int);
   188         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar);
   190         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> 
const& v);
   192         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> 
const& v);
   194         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar);
   196         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> 
const& v);
   198         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> 
const& v);
   200         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar);
   202         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> 
const& v);
   204         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> 
const& v);
   206         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar);
   208         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> 
const& v);
   210         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> 
const& v);
   212         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar);
   214         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> 
const& v);
   216         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> 
const& v);
   218         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar);
   220         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> 
const& v);
   222         GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> 
const& v);
   227     template<
typename T, qualifier Q>
   228     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> 
const& v);
   230     template<
typename T, qualifier Q>
   231     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> 
const& v);
   235     template<
typename T, qualifier Q>
   236     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> 
const& v, T scalar);
   238     template<
typename T, qualifier Q>
   239     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> 
const& v, vec<1, T, Q> 
const& scalar);
   241     template<
typename T, qualifier Q>
   242     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> 
const& v);
   244     template<
typename T, qualifier Q>
   245     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   247     template<
typename T, qualifier Q>
   248     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   250     template<
typename T, qualifier Q>
   251     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> 
const& v, T scalar);
   253     template<
typename T, qualifier Q>
   254     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   256     template<
typename T, qualifier Q>
   257     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> 
const& v);
   259     template<
typename T, qualifier Q>
   260     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   262     template<
typename T, qualifier Q>
   263     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   265     template<
typename T, qualifier Q>
   266     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> 
const& v, T scalar);
   268     template<
typename T, qualifier Q>
   269     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   271     template<
typename T, qualifier Q>
   272     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> 
const& v);
   274     template<
typename T, qualifier Q>
   275     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   277     template<
typename T, qualifier Q>
   278     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   280     template<
typename T, qualifier Q>
   281     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> 
const& v, T scalar);
   283     template<
typename T, qualifier Q>
   284     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   286     template<
typename T, qualifier Q>
   287     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> 
const& v);
   289     template<
typename T, qualifier Q>
   290     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   292     template<
typename T, qualifier Q>
   293     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   295     template<
typename T, qualifier Q>
   296     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> 
const& v, T scalar);
   298     template<
typename T, qualifier Q>
   299     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   301     template<
typename T, qualifier Q>
   302     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> 
const& v);
   304     template<
typename T, qualifier Q>
   305     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   307     template<
typename T, qualifier Q>
   308     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   310     template<
typename T, qualifier Q>
   311     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> 
const& v1, T scalar);
   313     template<
typename T, qualifier Q>
   314     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   316     template<
typename T, qualifier Q>
   317     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> 
const& v);
   319     template<
typename T, qualifier Q>
   320     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   322     template<
typename T, qualifier Q>
   323     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   325     template<
typename T, qualifier Q>
   326     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> 
const& v, T scalar);
   328     template<
typename T, qualifier Q>
   329     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   331     template<
typename T, qualifier Q>
   332     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> 
const& v);
   334     template<
typename T, qualifier Q>
   335     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   337     template<
typename T, qualifier Q>
   338     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   340     template<
typename T, qualifier Q>
   341     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> 
const& v, T scalar);
   343     template<
typename T, qualifier Q>
   344     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   346     template<
typename T, qualifier Q>
   347     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> 
const& v);
   349     template<
typename T, qualifier Q>
   350     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   352     template<
typename T, qualifier Q>
   353     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   355     template<
typename T, qualifier Q>
   356     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> 
const& v, T scalar);
   358     template<
typename T, qualifier Q>
   359     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   361     template<
typename T, qualifier Q>
   362     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> 
const& v);
   364     template<
typename T, qualifier Q>
   365     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   367     template<
typename T, qualifier Q>
   368     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   370     template<
typename T, qualifier Q>
   371     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> 
const& v, T scalar);
   373     template<
typename T, qualifier Q>
   374     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> 
const& v1, vec<1, T, Q> 
const& v2);
   376     template<
typename T, qualifier Q>
   377     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> 
const& v);
   379     template<
typename T, qualifier Q>
   380     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   382     template<
typename T, qualifier Q>
   383     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   385     template<
typename T, qualifier Q>
   386     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> 
const& v);
   390     template<
typename T, qualifier Q>
   391     GLM_FUNC_DECL GLM_CONSTEXPR 
bool operator==(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   393     template<
typename T, qualifier Q>
   394     GLM_FUNC_DECL GLM_CONSTEXPR 
bool operator!=(vec<3, T, Q> 
const& v1, vec<3, T, Q> 
const& v2);
   396     template<qualifier Q>
   397     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> 
const& v1, vec<3, bool, Q> 
const& v2);
   399     template<qualifier Q>
   400     GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> 
const& v1, vec<3, bool, Q> 
const& v2);
   403 #ifndef GLM_EXTERNAL_TEMPLATE   404 #include "type_vec3.inl"   405 #endif//GLM_EXTERNAL_TEMPLATE 
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.