0.9.9 API documenation
type_quat.hpp
1 
14 #pragma once
15 
16 // Dependency:
17 #include "../detail/type_mat3x3.hpp"
18 #include "../detail/type_mat4x4.hpp"
19 #include "../detail/type_vec3.hpp"
20 #include "../detail/type_vec4.hpp"
21 #include "../ext/vector_relational.hpp"
22 #include "../ext/quaternion_relational.hpp"
23 #include "../gtc/constants.hpp"
24 #include "../gtc/matrix_transform.hpp"
25 
26 namespace glm
27 {
30 
31  template<typename T, qualifier Q>
32  struct qua
33  {
34  // -- Implementation detail --
35 
36  typedef qua<T, Q> type;
37  typedef T value_type;
38 
39  // -- Data --
40 
41 # if GLM_SILENT_WARNINGS == GLM_ENABLE
42 # if GLM_COMPILER & GLM_COMPILER_GCC
43 # pragma GCC diagnostic push
44 # pragma GCC diagnostic ignored "-Wpedantic"
45 # elif GLM_COMPILER & GLM_COMPILER_CLANG
46 # pragma clang diagnostic push
47 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
48 # pragma clang diagnostic ignored "-Wnested-anon-types"
49 # elif GLM_COMPILER & GLM_COMPILER_VC
50 # pragma warning(push)
51 # pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
52 # endif
53 # endif
54 
55 # if GLM_LANG & GLM_LANG_CXXMS_FLAG
56  union
57  {
58  struct { T x, y, z, w;};
59 
60  typename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;
61  };
62 # else
63  T x, y, z, w;
64 # endif
65 
66 # if GLM_SILENT_WARNINGS == GLM_ENABLE
67 # if GLM_COMPILER & GLM_COMPILER_CLANG
68 # pragma clang diagnostic pop
69 # elif GLM_COMPILER & GLM_COMPILER_GCC
70 # pragma GCC diagnostic pop
71 # elif GLM_COMPILER & GLM_COMPILER_VC
72 # pragma warning(pop)
73 # endif
74 # endif
75 
76  // -- Component accesses --
77 
78  typedef length_t length_type;
80  GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}
81 
82  GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);
83  GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
84 
85  // -- Implicit basic constructors --
86 
87  GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT;
88  GLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, Q> const& q) GLM_DEFAULT;
89  template<qualifier P>
90  GLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, P> const& q);
91 
92  // -- Explicit basic constructors --
93 
94  GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v);
95  GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z);
96 
97  // -- Conversion constructors --
98 
99  template<typename U, qualifier P>
100  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua<U, P> const& q);
101 
103 # if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS
104  GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>();
105  GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>();
106 # endif
107 
114  GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v);
115 
117  GLM_FUNC_DECL GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles);
118  GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q);
119  GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q);
120 
121  // -- Unary arithmetic operators --
122 
123  GLM_FUNC_DECL qua<T, Q>& operator=(qua<T, Q> const& q) GLM_DEFAULT;
124 
125  template<typename U>
126  GLM_FUNC_DECL qua<T, Q>& operator=(qua<U, Q> const& q);
127  template<typename U>
128  GLM_FUNC_DECL qua<T, Q>& operator+=(qua<U, Q> const& q);
129  template<typename U>
130  GLM_FUNC_DECL qua<T, Q>& operator-=(qua<U, Q> const& q);
131  template<typename U>
132  GLM_FUNC_DECL qua<T, Q>& operator*=(qua<U, Q> const& q);
133  template<typename U>
134  GLM_FUNC_DECL qua<T, Q>& operator*=(U s);
135  template<typename U>
136  GLM_FUNC_DECL qua<T, Q>& operator/=(U s);
137  };
138 
139  // -- Unary bit operators --
140 
141  template<typename T, qualifier Q>
142  GLM_FUNC_DECL qua<T, Q> operator+(qua<T, Q> const& q);
143 
144  template<typename T, qualifier Q>
145  GLM_FUNC_DECL qua<T, Q> operator-(qua<T, Q> const& q);
146 
147  // -- Binary operators --
148 
149  template<typename T, qualifier Q>
150  GLM_FUNC_DECL qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p);
151 
152  template<typename T, qualifier Q>
153  GLM_FUNC_DECL qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p);
154 
155  template<typename T, qualifier Q>
156  GLM_FUNC_DECL qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p);
157 
158  template<typename T, qualifier Q>
159  GLM_FUNC_DECL vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v);
160 
161  template<typename T, qualifier Q>
162  GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q);
163 
164  template<typename T, qualifier Q>
165  GLM_FUNC_DECL vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v);
166 
167  template<typename T, qualifier Q>
168  GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q);
169 
170  template<typename T, qualifier Q>
171  GLM_FUNC_DECL qua<T, Q> operator*(qua<T, Q> const& q, T const& s);
172 
173  template<typename T, qualifier Q>
174  GLM_FUNC_DECL qua<T, Q> operator*(T const& s, qua<T, Q> const& q);
175 
176  template<typename T, qualifier Q>
177  GLM_FUNC_DECL qua<T, Q> operator/(qua<T, Q> const& q, T const& s);
178 
179  // -- Boolean operators --
180 
181  template<typename T, qualifier Q>
182  GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2);
183 
184  template<typename T, qualifier Q>
185  GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2);
186 
188 } //namespace glm
189 
190 #include "type_quat.inl"
GLM_FUNC_DECL T length(qua< T, Q > const &q)
Returns the norm of a quaternions.
Definition: common.hpp:20
GLM_FUNC_DECL vec< 3, T, Q > eulerAngles(qua< T, Q > const &x)
Returns euler angles, pitch as x, yaw as y, roll as z.