euler_angles.hpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. /// @brief Build matrices from Euler angles.
  10. ///
  11. /// <glm/gtx/euler_angles.hpp> need to be included to use these functionalities.
  12. #pragma once
  13. // Dependency:
  14. #include "../glm.hpp"
  15. #ifndef GLM_ENABLE_EXPERIMENTAL
  16. # 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."
  17. #endif
  18. #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
  19. # pragma message("GLM: GLM_GTX_euler_angles extension included")
  20. #endif
  21. namespace glm
  22. {
  23. /// @addtogroup gtx_euler_angles
  24. /// @{
  25. /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
  26. /// @see gtx_euler_angles
  27. template<typename T>
  28. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX(
  29. T const& angleX);
  30. /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
  31. /// @see gtx_euler_angles
  32. template<typename T>
  33. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY(
  34. T const& angleY);
  35. /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
  36. /// @see gtx_euler_angles
  37. template<typename T>
  38. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ(
  39. T const& angleZ);
  40. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
  41. /// @see gtx_euler_angles
  42. template<typename T>
  43. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY(
  44. T const& angleX,
  45. T const& angleY);
  46. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
  47. /// @see gtx_euler_angles
  48. template<typename T>
  49. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX(
  50. T const& angleY,
  51. T const& angleX);
  52. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
  53. /// @see gtx_euler_angles
  54. template<typename T>
  55. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ(
  56. T const& angleX,
  57. T const& angleZ);
  58. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
  59. /// @see gtx_euler_angles
  60. template<typename T>
  61. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX(
  62. T const& angle,
  63. T const& angleX);
  64. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
  65. /// @see gtx_euler_angles
  66. template<typename T>
  67. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ(
  68. T const& angleY,
  69. T const& angleZ);
  70. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
  71. /// @see gtx_euler_angles
  72. template<typename T>
  73. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY(
  74. T const& angleZ,
  75. T const& angleY);
  76. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).
  77. /// @see gtx_euler_angles
  78. template<typename T>
  79. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ(
  80. T const& t1,
  81. T const& t2,
  82. T const& t3);
  83. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
  84. /// @see gtx_euler_angles
  85. template<typename T>
  86. GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ(
  87. T const& yaw,
  88. T const& pitch,
  89. T const& roll);
  90. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
  91. /// @see gtx_euler_angles
  92. template<typename T>
  93. GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll(
  94. T const& yaw,
  95. T const& pitch,
  96. T const& roll);
  97. /// Creates a 2D 2 * 2 rotation matrix from an euler angle.
  98. /// @see gtx_euler_angles
  99. template<typename T>
  100. GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle);
  101. /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.
  102. /// @see gtx_euler_angles
  103. template<typename T>
  104. GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle);
  105. /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).
  106. /// @see gtx_euler_angles
  107. template<typename T, qualifier P>
  108. GLM_FUNC_DECL mat<3, 3, T, P> orientate3(vec<3, T, P> const& angles);
  109. /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
  110. /// @see gtx_euler_angles
  111. template<typename T, qualifier P>
  112. GLM_FUNC_DECL mat<4, 4, T, P> orientate4(vec<3, T, P> const& angles);
  113. /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M
  114. /// @see gtx_euler_angles
  115. template<typename T>
  116. GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,
  117. T & t1,
  118. T & t2,
  119. T & t3);
  120. /// @}
  121. }//namespace glm
  122. #include "euler_angles.inl"