Back to Mame

0.9.8: quaternion.hpp Source File

3rdparty/glm/doc/api/a00087_source.html

latest16.6 KB
Original Source

| | 0.9.8 |

gtc/quaternion.hpp

Go to the documentation of this file.

1

15 #pragma once

16

17 // Dependency:

18 #include "../mat3x3.hpp"

19 #include "../mat4x4.hpp"

20 #include "../vec3.hpp"

21 #include "../vec4.hpp"

22 #include "../gtc/constants.hpp"

23

24 #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)

25 # pragma message("GLM: GLM_GTC_quaternion extension included")

26 #endif

27

28 namespace glm

29 {

32

33template <typename T, precision P = defaultp>

34struct tquat

35 {

36// -- Implementation detail --

37

38typedef tquat<T, P> type;

39typedef T value_type;

40

41// -- Data --

42

43 # if GLM_HAS_ALIGNED_TYPE

44 # if GLM_COMPILER & GLM_COMPILER_GCC

45 # pragma GCC diagnostic push

46 # pragma GCC diagnostic ignored "-pedantic"

47 # endif

48 # if GLM_COMPILER & GLM_COMPILER_CLANG

49 # pragma clang diagnostic push

50 # pragma clang diagnostic ignored "-Wgnu-anonymous-struct"

51 # pragma clang diagnostic ignored "-Wnested-anon-types"

52 # endif

53

54union

55 {

56struct { T x, y, z, w;};

57typename detail::storage<T, sizeof(T) * 4, detail::is_aligned<P>::value>::type data;

58 };

59

60 # if GLM_COMPILER & GLM_COMPILER_CLANG

61 # pragma clang diagnostic pop

62 # endif

63 # if GLM_COMPILER & GLM_COMPILER_GCC

64 # pragma GCC diagnostic pop

65 # endif

66 # else

67 T x, y, z, w;

68 # endif

69

70// -- Component accesses --

71

72typedef length_t length_type;

74 GLM_FUNC_DECL GLM_CONSTEXPR length_type length() const;

75

76 GLM_FUNC_DECL T & operator[](length_type i);

77 GLM_FUNC_DECL T const & operator[](length_type i) const;

78

79// -- Implicit basic constructors --

80

81 GLM_FUNC_DECL GLM_CONSTEXPR tquat() GLM_DEFAULT_CTOR;

82 GLM_FUNC_DECL GLM_CONSTEXPR tquat(tquat<T, P> const & q) GLM_DEFAULT;

83 template <precision Q>

84 GLM_FUNC_DECL GLM_CONSTEXPR tquat(tquat<T, Q> const & q);

85

86// -- Explicit basic constructors --

87

88 GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tquat(ctor);

89 GLM_FUNC_DECL GLM_CONSTEXPR tquat(T const & s, tvec3<T, P> const & v);

90 GLM_FUNC_DECL GLM_CONSTEXPR tquat(T const & w, T const & x, T const & y, T const & z);

91

92// -- Conversion constructors --

93

94 template <typename U, precision Q>

95 GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tquat(tquat<U, Q> const & q);

96

98 # if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS

99 GLM_FUNC_DECL explicit operator tmat3x3<T, P>();

100 GLM_FUNC_DECL explicit operator tmat4x4<T, P>();

101 # endif

102

109 GLM_FUNC_DECL tquat(tvec3<T, P> const & u, tvec3<T, P> const & v);

110

112 GLM_FUNC_DECL GLM_EXPLICIT tquat(tvec3<T, P> const & eulerAngles);

113 GLM_FUNC_DECL GLM_EXPLICIT tquat(tmat3x3<T, P> const & m);

114 GLM_FUNC_DECL GLM_EXPLICIT tquat(tmat4x4<T, P> const & m);

115

116// -- Unary arithmetic operators --

117

118 GLM_FUNC_DECL tquat<T, P> & operator=(tquat<T, P> const & m) GLM_DEFAULT;

119

120template <typename U>

121 GLM_FUNC_DECL tquat<T, P> & operator=(tquat<U, P> const & m);

122template <typename U>

123 GLM_FUNC_DECL tquat<T, P> & operator+=(tquat<U, P> const & q);

124template <typename U>

125 GLM_FUNC_DECL tquat<T, P> & operator-=(tquat<U, P> const & q);

126template <typename U>

127 GLM_FUNC_DECL tquat<T, P> & operator*=(tquat<U, P> const & q);

128template <typename U>

129 GLM_FUNC_DECL tquat<T, P> & operator*=(U s);

130template <typename U>

131 GLM_FUNC_DECL tquat<T, P> & operator/=(U s);

132 };

133

134// -- Unary bit operators --

135

136template <typename T, precision P>

137 GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> const & q);

138

139template <typename T, precision P>

140 GLM_FUNC_DECL tquat<T, P> operator-(tquat<T, P> const & q);

141

142// -- Binary operators --

143

144template <typename T, precision P>

145 GLM_FUNC_DECL tquat<T, P> operator+(tquat<T, P> const & q, tquat<T, P> const & p);

146

147template <typename T, precision P>

148 GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> const & q, tquat<T, P> const & p);

149

150template <typename T, precision P>

151 GLM_FUNC_DECL tvec3<T, P> operator*(tquat<T, P> const & q, tvec3<T, P> const & v);

152

153template <typename T, precision P>

154 GLM_FUNC_DECL tvec3<T, P> operator*(tvec3<T, P> const & v, tquat<T, P> const & q);

155

156template <typename T, precision P>

157 GLM_FUNC_DECL tvec4<T, P> operator*(tquat<T, P> const & q, tvec4<T, P> const & v);

158

159template <typename T, precision P>

160 GLM_FUNC_DECL tvec4<T, P> operator*(tvec4<T, P> const & v, tquat<T, P> const & q);

161

162template <typename T, precision P>

163 GLM_FUNC_DECL tquat<T, P> operator*(tquat<T, P> const & q, T const & s);

164

165template <typename T, precision P>

166 GLM_FUNC_DECL tquat<T, P> operator*(T const & s, tquat<T, P> const & q);

167

168template <typename T, precision P>

169 GLM_FUNC_DECL tquat<T, P> operator/(tquat<T, P> const & q, T const & s);

170

171// -- Boolean operators --

172

173template <typename T, precision P>

174 GLM_FUNC_DECL bool operator==(tquat<T, P> const & q1, tquat<T, P> const & q2);

175

176template <typename T, precision P>

177 GLM_FUNC_DECL bool operator!=(tquat<T, P> const & q1, tquat<T, P> const & q2);

178

182template <typename T, precision P>

183 GLM_FUNC_DECL T length(tquat<T, P> const & q);

184

188template <typename T, precision P>

189 GLM_FUNC_DECL tquat<T, P> normalize(tquat<T, P> const & q);

190

194template <typename T, precision P, template <typename, precision> class quatType>

195 GLM_FUNC_DECL T dot(quatType<T, P> const & x, quatType<T, P> const & y);

196

207template <typename T, precision P>

208 GLM_FUNC_DECL tquat<T, P> mix(tquat<T, P> const & x, tquat<T, P> const & y, T a);

209

218template <typename T, precision P>

219 GLM_FUNC_DECL tquat<T, P> lerp(tquat<T, P> const & x, tquat<T, P> const & y, T a);

220

229template <typename T, precision P>

230 GLM_FUNC_DECL tquat<T, P> slerp(tquat<T, P> const & x, tquat<T, P> const & y, T a);

231

235template <typename T, precision P>

236 GLM_FUNC_DECL tquat<T, P> conjugate(tquat<T, P> const & q);

237

241template <typename T, precision P>

242 GLM_FUNC_DECL tquat<T, P> inverse(tquat<T, P> const & q);

243

251template <typename T, precision P>

252 GLM_FUNC_DECL tquat<T, P> rotate(tquat<T, P> const & q, T const & angle, tvec3<T, P> const & axis);

253

258template <typename T, precision P>

259 GLM_FUNC_DECL tvec3<T, P> eulerAngles(tquat<T, P> const & x);

260

264template <typename T, precision P>

265 GLM_FUNC_DECL T roll(tquat<T, P> const & x);

266

270template <typename T, precision P>

271 GLM_FUNC_DECL T pitch(tquat<T, P> const & x);

272

276template <typename T, precision P>

277 GLM_FUNC_DECL T yaw(tquat<T, P> const & x);

278

282template <typename T, precision P>

283 GLM_FUNC_DECL tmat3x3<T, P> mat3_cast(tquat<T, P> const & x);

284

288template <typename T, precision P>

289 GLM_FUNC_DECL tmat4x4<T, P> mat4_cast(tquat<T, P> const & x);

290

294template <typename T, precision P>

295 GLM_FUNC_DECL tquat<T, P> quat_cast(tmat3x3<T, P> const & x);

296

300template <typename T, precision P>

301 GLM_FUNC_DECL tquat<T, P> quat_cast(tmat4x4<T, P> const & x);

302

306template <typename T, precision P>

307 GLM_FUNC_DECL T angle(tquat<T, P> const & x);

308

312template <typename T, precision P>

313 GLM_FUNC_DECL tvec3<T, P> axis(tquat<T, P> const & x);

314

321template <typename T, precision P>

322 GLM_FUNC_DECL tquat<T, P> angleAxis(T const & angle, tvec3<T, P> const & axis);

323

329template <typename T, precision P>

330 GLM_FUNC_DECL tvec4<bool, P> lessThan(tquat<T, P> const & x, tquat<T, P> const & y);

331

337template <typename T, precision P>

338 GLM_FUNC_DECL tvec4<bool, P> lessThanEqual(tquat<T, P> const & x, tquat<T, P> const & y);

339

345template <typename T, precision P>

346 GLM_FUNC_DECL tvec4<bool, P> greaterThan(tquat<T, P> const & x, tquat<T, P> const & y);

347

353template <typename T, precision P>

354 GLM_FUNC_DECL tvec4<bool, P> greaterThanEqual(tquat<T, P> const & x, tquat<T, P> const & y);

355

361template <typename T, precision P>

362 GLM_FUNC_DECL tvec4<bool, P> equal(tquat<T, P> const & x, tquat<T, P> const & y);

363

369template <typename T, precision P>

370 GLM_FUNC_DECL tvec4<bool, P> notEqual(tquat<T, P> const & x, tquat<T, P> const & y);

371

381template <typename T, precision P>

382 GLM_FUNC_DECL tvec4<bool, P> isnan(tquat<T, P> const & x);

383

391template <typename T, precision P>

392 GLM_FUNC_DECL tvec4<bool, P> isinf(tquat<T, P> const & x);

393

395 } //namespace glm

396

397 #include "quaternion.inl"

glm::roll

GLM_FUNC_DECL T roll(tquat< T, P > const &x)

Returns roll value of euler angles expressed in radians.

glm::pitch

GLM_FUNC_DECL T pitch(tquat< T, P > const &x)

Returns pitch value of euler angles expressed in radians.

glm::equal

GLM_FUNC_DECL tvec4< bool, P > equal(tquat< T, P > const &x, tquat< T, P > const &y)

Returns the component-wise comparison of result x == y.

glm::rotate

GLM_FUNC_DECL tquat< T, P > rotate(tquat< T, P > const &q, T const &angle, tvec3< T, P > const &axis)

Rotates a quaternion from a vector of 3 components axis and an angle.

glm::greaterThanEqual

GLM_FUNC_DECL tvec4< bool, P > greaterThanEqual(tquat< T, P > const &x, tquat< T, P > const &y)

Returns the component-wise comparison of result x >= y.

glm

Definition: _noise.hpp:11

glm::quat_cast

GLM_FUNC_DECL tquat< T, P > quat_cast(tmat4x4< T, P > const &x)

Converts a 4 * 4 matrix to a quaternion.

glm::isnan

GLM_FUNC_DECL tvec4< bool, P > isnan(tquat< T, P > const &x)

Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...

glm::conjugate

GLM_FUNC_DECL tquat< T, P > conjugate(tquat< T, P > const &q)

Returns the q conjugate.

glm::greaterThan

GLM_FUNC_DECL tvec4< bool, P > greaterThan(tquat< T, P > const &x, tquat< T, P > const &y)

Returns the component-wise comparison of result x > y.

glm::lerp

GLM_FUNC_DECL tquat< T, P > lerp(tquat< T, P > const &x, tquat< T, P > const &y, T a)

Linear interpolation of two quaternions.

glm::mat4_cast

GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)

Converts a quaternion to a 4 * 4 matrix.

glm::normalize

GLM_FUNC_DECL tquat< T, P > normalize(tquat< T, P > const &q)

Returns the normalized quaternion.

glm::length

GLM_FUNC_DECL T length(tquat< T, P > const &q)

Returns the length of the quaternion.

glm::axis

GLM_FUNC_DECL tvec3< T, P > axis(tquat< T, P > const &x)

Returns the q rotation axis.

glm::dot

GLM_FUNC_DECL T dot(quatType< T, P > const &x, quatType< T, P > const &y)

Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...

glm::lessThanEqual

GLM_FUNC_DECL tvec4< bool, P > lessThanEqual(tquat< T, P > const &x, tquat< T, P > const &y)

Returns the component-wise comparison of result x <= y.

glm::eulerAngles

GLM_FUNC_DECL tvec3< T, P > eulerAngles(tquat< T, P > const &x)

Returns euler angles, pitch as x, yaw as y, roll as z.

glm::angle

GLM_FUNC_DECL T angle(tquat< T, P > const &x)

Returns the quaternion rotation angle.

glm::slerp

GLM_FUNC_DECL tquat< T, P > slerp(tquat< T, P > const &x, tquat< T, P > const &y, T a)

Spherical linear interpolation of two quaternions.

glm::notEqual

GLM_FUNC_DECL tvec4< bool, P > notEqual(tquat< T, P > const &x, tquat< T, P > const &y)

Returns the component-wise comparison of result x != y.

glm::mat3_cast

GLM_FUNC_DECL tmat3x3< T, P > mat3_cast(tquat< T, P > const &x)

Converts a quaternion to a 3 * 3 matrix.

glm::angleAxis

GLM_FUNC_DECL tquat< T, P > angleAxis(T const &angle, tvec3< T, P > const &axis)

Build a quaternion from an angle and a normalized axis.

glm::lessThan

GLM_FUNC_DECL tvec4< bool, P > lessThan(tquat< T, P > const &x, tquat< T, P > const &y)

Returns the component-wise comparison result of x < y.

glm::isinf

GLM_FUNC_DECL tvec4< bool, P > isinf(tquat< T, P > const &x)

Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...

glm::mix

GLM_FUNC_DECL tquat< T, P > mix(tquat< T, P > const &x, tquat< T, P > const &y, T a)

Spherical linear interpolation of two quaternions.

glm::inverse

GLM_FUNC_DECL tquat< T, P > inverse(tquat< T, P > const &q)

Returns the q inverse.

glm::yaw

GLM_FUNC_DECL T yaw(tquat< T, P > const &x)

Returns yaw value of euler angles expressed in radians.


Generated by 1.8.10