42 #include "../gtc/quaternion.hpp" 43 #include "../gtx/fast_trigonometry.hpp" 45 #if(GLM_ARCH != GLM_ARCH_PURE) 47 #if(GLM_ARCH & GLM_ARCH_SSE2) 48 # include "../gtx/simd_mat4.hpp" 50 # error "GLM: GLM_GTX_simd_quat requires compiler support of SSE2 through intrinsics" 53 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) 54 # pragma message("GLM: GLM_GTX_simd_quat extension included") 59 #if (GLM_COMPILER & GLM_COMPILER_VC) 60 # pragma warning(push) 61 # pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union 73 typedef __m128 value_type;
74 typedef std::size_t size_type;
75 static size_type value_size();
77 typedef fquatSIMD type;
78 typedef tquat<bool, defaultp> bool_type;
80 #ifdef GLM_SIMD_ENABLE_XYZW_UNION 84 struct {
float x, y, z, w;};
94 fquatSIMD(__m128
const & Data);
95 fquatSIMD(fquatSIMD
const & q);
116 fquatSIMD& operator =(fquatSIMD
const & q);
117 fquatSIMD& operator*=(
float const & s);
118 fquatSIMD& operator/=(
float const & s);
126 detail::fquatSIMD
const & q);
129 detail::fquatSIMD
const & q,
130 detail::fquatSIMD
const & p);
133 detail::fquatSIMD
const & q,
134 detail::fquatSIMD
const & p);
137 detail::fquatSIMD
const & q,
138 detail::fvec4SIMD
const & v);
141 detail::fvec4SIMD
const & v,
142 detail::fquatSIMD
const & q);
145 detail::fquatSIMD
const & q,
150 detail::fquatSIMD
const & q);
153 detail::fquatSIMD
const & q,
158 typedef glm::detail::fquatSIMD simdQuat;
166 detail::fquatSIMD
const & x);
170 detail::fquatSIMD quatSIMD_cast(
171 detail::fmat4x4SIMD
const & m);
175 template <
typename T, precision P>
176 detail::fquatSIMD quatSIMD_cast(
177 detail::tmat4x4<T, P>
const & m);
181 template <
typename T, precision P>
182 detail::fquatSIMD quatSIMD_cast(
183 detail::tmat3x3<T, P>
const & m);
187 detail::fmat4x4SIMD mat4SIMD_cast(
188 detail::fquatSIMD
const & q);
193 detail::fquatSIMD
const & q);
200 detail::fquatSIMD
const & x);
206 detail::fquatSIMD
const & x);
212 detail::fquatSIMD
const & q1,
213 detail::fquatSIMD
const & q2);
225 detail::fquatSIMD
mix(
226 detail::fquatSIMD
const & x,
227 detail::fquatSIMD
const & y,
238 detail::fquatSIMD
lerp(
239 detail::fquatSIMD
const & x,
240 detail::fquatSIMD
const & y,
251 detail::fquatSIMD
slerp(
252 detail::fquatSIMD
const & x,
253 detail::fquatSIMD
const & y,
268 detail::fquatSIMD
const & x,
269 detail::fquatSIMD
const & y,
279 detail::fquatSIMD fastSlerp(
280 detail::fquatSIMD
const & x,
281 detail::fquatSIMD
const & y,
289 detail::fquatSIMD
const & q);
295 detail::fquatSIMD
const & q);
303 detail::fquatSIMD angleAxisSIMD(
315 detail::fquatSIMD angleAxisSIMD(
330 #include "simd_quat.inl" 333 #if (GLM_COMPILER & GLM_COMPILER_VC) 334 # pragma warning(pop) 338 #endif//(GLM_ARCH != GLM_ARCH_PURE) GLM_FUNC_DECL T fastSin(const T &angle)
GLM_FUNC_DECL detail::tvec3< T, P > axis(detail::tquat< T, P > const &x)
GLM_FUNC_DECL detail::tquat< T, P > lerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
highp_quat quat
Quaternion of default single-precision floating-point numbers.
GLM_FUNC_DECL detail::tquat< T, P > conjugate(detail::tquat< T, P > const &q)
#define GLM_ALIGNED_STRUCT(x)
GLM_FUNC_DECL T angle(detail::tquat< T, P > const &x)
GLM_FUNC_DECL vecType< T, P > mix(vecType< T, P > const &x, vecType< T, P > const &y, vecType< U, P > const &a)
GLM_FUNC_DECL tmat2x2< T, P > operator*(tmat2x2< T, P > const &m, T const &s)
GLM_FUNC_DECL genType normalize(genType const &x)
GLM_FUNC_DECL detail::tquat< T, P > fastMix(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
GLM_FUNC_DECL tmat2x2< T, P > operator+(tmat2x2< T, P > const &m, T const &s)
GLM_FUNC_DECL tmat2x2< T, P > operator/(tmat2x2< T, P > const &m, T const &s)
GLM_FUNC_DECL detail::tquat< T, P > slerp(detail::tquat< T, P > const &x, detail::tquat< T, P > const &y, T const &a)
Returns the slurp interpolation between two quaternions.
GLM_FUNC_DECL tmat2x2< T, P > operator-(tmat2x2< T, P > const &m, T const &s)
GLM_FUNC_DECL detail::tvec3< T, P > eulerAngles(detail::tquat< T, P > const &x)
GLM_FUNC_DECL detail::tquat< T, P > quat_cast(detail::tmat3x3< T, P > const &x)
GLM_FUNC_DECL detail::tmat4x4< T, P > mat4_cast(detail::tquat< T, P > const &x)
GLM_FUNC_DECL T dot(vecType< T, P > const &x, vecType< T, P > const &y)
GLM_FUNC_DECL genType::value_type length(genType const &x)
GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)