euler_angles.hpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /// @ref gtx_euler_angles
  2. /// @file glm/gtx/euler_angles.hpp
  3. ///
  4. /// @see core (dependence)
  5. ///
  6. /// @defgroup gtx_euler_angles GLM_GTX_euler_angles
  7. /// @ingroup gtx
  8. ///
  9. /// Include <glm/gtx/euler_angles.hpp> to use the features of this extension.
  10. ///
  11. /// Build matrices from Euler angles.
  12. ///
  13. /// Extraction of Euler angles from rotation matrix.
  14. /// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix.
  15. #pragma once
  16. // Dependency:
  17. #include "../glm.hpp"
  18. #ifndef GLM_ENABLE_EXPERIMENTAL
  19. // #error "GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
  20. #elif GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
  21. # pragma message("GLM: GLM_GTX_euler_angles extension included")
  22. #endif
  23. namespace glm
  24. {
  25. /// @addtogroup gtx_euler_angles
  26. /// @{
  27. /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
  28. /// @see gtx_euler_angles
  29. template<typename T>
  30. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX(
  31. T const& angleX);
  32. /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
  33. /// @see gtx_euler_angles
  34. template<typename T>
  35. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY(
  36. T const& angleY);
  37. /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
  38. /// @see gtx_euler_angles
  39. template<typename T>
  40. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ(
  41. T const& angleZ);
  42. /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.
  43. /// @see gtx_euler_angles
  44. template <typename T>
  45. GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX(
  46. T const & angleX, T const & angularVelocityX);
  47. /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.
  48. /// @see gtx_euler_angles
  49. template <typename T>
  50. GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY(
  51. T const & angleY, T const & angularVelocityY);
  52. /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.
  53. /// @see gtx_euler_angles
  54. template <typename T>
  55. GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ(
  56. T const & angleZ, T const & angularVelocityZ);
  57. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
  58. /// @see gtx_euler_angles
  59. template<typename T>
  60. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY(
  61. T const& angleX,
  62. T const& angleY);
  63. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
  64. /// @see gtx_euler_angles
  65. template<typename T>
  66. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX(
  67. T const& angleY,
  68. T const& angleX);
  69. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
  70. /// @see gtx_euler_angles
  71. template<typename T>
  72. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ(
  73. T const& angleX,
  74. T const& angleZ);
  75. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
  76. /// @see gtx_euler_angles
  77. template<typename T>
  78. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX(
  79. T const& angle,
  80. T const& angleX);
  81. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
  82. /// @see gtx_euler_angles
  83. template<typename T>
  84. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ(
  85. T const& angleY,
  86. T const& angleZ);
  87. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
  88. /// @see gtx_euler_angles
  89. template<typename T>
  90. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY(
  91. T const& angleZ,
  92. T const& angleY);
  93. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).
  94. /// @see gtx_euler_angles
  95. template<typename T>
  96. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ(
  97. T const& t1,
  98. T const& t2,
  99. T const& t3);
  100. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
  101. /// @see gtx_euler_angles
  102. template<typename T>
  103. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ(
  104. T const& yaw,
  105. T const& pitch,
  106. T const& roll);
  107. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).
  108. /// @see gtx_euler_angles
  109. template <typename T>
  110. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX(
  111. T const & t1,
  112. T const & t2,
  113. T const & t3);
  114. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).
  115. /// @see gtx_euler_angles
  116. template <typename T>
  117. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX(
  118. T const & t1,
  119. T const & t2,
  120. T const & t3);
  121. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).
  122. /// @see gtx_euler_angles
  123. template <typename T>
  124. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY(
  125. T const & t1,
  126. T const & t2,
  127. T const & t3);
  128. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).
  129. /// @see gtx_euler_angles
  130. template <typename T>
  131. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY(
  132. T const & t1,
  133. T const & t2,
  134. T const & t3);
  135. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).
  136. /// @see gtx_euler_angles
  137. template <typename T>
  138. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ(
  139. T const & t1,
  140. T const & t2,
  141. T const & t3);
  142. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).
  143. /// @see gtx_euler_angles
  144. template <typename T>
  145. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ(
  146. T const & t1,
  147. T const & t2,
  148. T const & t3);
  149. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).
  150. /// @see gtx_euler_angles
  151. template <typename T>
  152. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY(
  153. T const & t1,
  154. T const & t2,
  155. T const & t3);
  156. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).
  157. /// @see gtx_euler_angles
  158. template <typename T>
  159. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX(
  160. T const & t1,
  161. T const & t2,
  162. T const & t3);
  163. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).
  164. /// @see gtx_euler_angles
  165. template <typename T>
  166. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX(
  167. T const & t1,
  168. T const & t2,
  169. T const & t3);
  170. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).
  171. /// @see gtx_euler_angles
  172. template <typename T>
  173. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY(
  174. T const & t1,
  175. T const & t2,
  176. T const & t3);
  177. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
  178. /// @see gtx_euler_angles
  179. template<typename T>
  180. GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll(
  181. T const& yaw,
  182. T const& pitch,
  183. T const& roll);
  184. /// Creates a 2D 2 * 2 rotation matrix from an euler angle.
  185. /// @see gtx_euler_angles
  186. template<typename T>
  187. GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle);
  188. /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.
  189. /// @see gtx_euler_angles
  190. template<typename T>
  191. GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle);
  192. /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).
  193. /// @see gtx_euler_angles
  194. template<typename T, qualifier Q>
  195. GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles);
  196. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
  197. /// @see gtx_euler_angles
  198. template<typename T, qualifier Q>
  199. GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles);
  200. /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M
  201. /// @see gtx_euler_angles
  202. template<typename T>
  203. GLM_FUNC_DISCARD_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,
  204. T & t1,
  205. T & t2,
  206. T & t3);
  207. /// Extracts the (Y * X * Z) Euler angles from the rotation matrix M
  208. /// @see gtx_euler_angles
  209. template <typename T>
  210. GLM_FUNC_DISCARD_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M,
  211. T & t1,
  212. T & t2,
  213. T & t3);
  214. /// Extracts the (X * Z * X) Euler angles from the rotation matrix M
  215. /// @see gtx_euler_angles
  216. template <typename T>
  217. GLM_FUNC_DISCARD_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M,
  218. T & t1,
  219. T & t2,
  220. T & t3);
  221. /// Extracts the (X * Y * X) Euler angles from the rotation matrix M
  222. /// @see gtx_euler_angles
  223. template <typename T>
  224. GLM_FUNC_DISCARD_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M,
  225. T & t1,
  226. T & t2,
  227. T & t3);
  228. /// Extracts the (Y * X * Y) Euler angles from the rotation matrix M
  229. /// @see gtx_euler_angles
  230. template <typename T>
  231. GLM_FUNC_DISCARD_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M,
  232. T & t1,
  233. T & t2,
  234. T & t3);
  235. /// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M
  236. /// @see gtx_euler_angles
  237. template <typename T>
  238. GLM_FUNC_DISCARD_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M,
  239. T & t1,
  240. T & t2,
  241. T & t3);
  242. /// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M
  243. /// @see gtx_euler_angles
  244. template <typename T>
  245. GLM_FUNC_DISCARD_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M,
  246. T & t1,
  247. T & t2,
  248. T & t3);
  249. /// Extracts the (Z * X * Z) Euler angles from the rotation matrix M
  250. /// @see gtx_euler_angles
  251. template <typename T>
  252. GLM_FUNC_DISCARD_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M,
  253. T & t1,
  254. T & t2,
  255. T & t3);
  256. /// Extracts the (X * Z * Y) Euler angles from the rotation matrix M
  257. /// @see gtx_euler_angles
  258. template <typename T>
  259. GLM_FUNC_DISCARD_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M,
  260. T & t1,
  261. T & t2,
  262. T & t3);
  263. /// Extracts the (Y * Z * X) Euler angles from the rotation matrix M
  264. /// @see gtx_euler_angles
  265. template <typename T>
  266. GLM_FUNC_DISCARD_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M,
  267. T & t1,
  268. T & t2,
  269. T & t3);
  270. /// Extracts the (Z * Y * X) Euler angles from the rotation matrix M
  271. /// @see gtx_euler_angles
  272. template <typename T>
  273. GLM_FUNC_DISCARD_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M,
  274. T & t1,
  275. T & t2,
  276. T & t3);
  277. /// Extracts the (Z * X * Y) Euler angles from the rotation matrix M
  278. /// @see gtx_euler_angles
  279. template <typename T>
  280. GLM_FUNC_DISCARD_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M,
  281. T & t1,
  282. T & t2,
  283. T & t3);
  284. /// @}
  285. }//namespace glm
  286. #include "euler_angles.inl"