summaryrefslogtreecommitdiff
path: root/src/glm/gtx/euler_angles.hpp
blob: 0c4abbabf6f37f8df3a04fa83ce376f48400ab9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
///////////////////////////////////////////////////////////////////////////////////////////////////
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Created : 2005-12-21
// Updated : 2007-08-14
// Licence : This source is under MIT License
// File    : glm/gtx/euler_angles.hpp
///////////////////////////////////////////////////////////////////////////////////////////////////
// Dependency:
// - GLM core
// - GLM_GTC_half_float
///////////////////////////////////////////////////////////////////////////////////////////////////
// ToDo:
// - mat2 mat2GTX(const vec2& angles) undefined
// - mat3 mat3GTX(const vec2& angles) undefined
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef glm_gtx_euler_angles
#define glm_gtx_euler_angles

// Dependency:
#include "../glm.hpp"
#include "../gtc/half_float.hpp"

#if(defined(GLM_MESSAGES) && !defined(glm_ext))
#	pragma message("GLM: GLM_GTX_euler_angles extension included")
#endif

namespace glm{
namespace gtx{
namespace euler_angles ///< GLM_GTX_euler_angles extension: Build matrices from Euler angles.
{
	/// \addtogroup gtx_euler_angles
	/// @{

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleX(
		valType const & angleX);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleY(
		valType const & angleY);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleZ(
		valType const & angleZ);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleXY(
		valType const & angleX, 
		valType const & angleY);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleYX(
		valType const & angleY, 
		valType const & angleX);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleXZ(
		valType const & angleX, 
		valType const & angleZ);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleZX(
		valType const & angleZ, 
		valType const & angleX);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleYZ(
		valType const & angleY, 
		valType const & angleZ);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleZY(
		valType const & angleZ, 
		valType const & angleY);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> eulerAngleYXZ(
		valType const & yaw, 
		valType const & pitch, 
		valType const & roll);

	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
	//! From GLM_GTX_euler_angles extension.
	template <typename valType> 
	detail::tmat4x4<valType> yawPitchRoll(
		valType const & yaw, 
		valType const & pitch, 
		valType const & roll);

	//! Creates a 2D 2 * 2 rotation matrix from an euler angle.
	//! From GLM_GTX_euler_angles extension.
	template <typename T> 
	detail::tmat2x2<T> orientate2(T const & angle);

	//! Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.
	//! From GLM_GTX_euler_angles extension.
	template <typename T> 
	detail::tmat3x3<T> orientate3(T const & angle);

	//! Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). 
	//! From GLM_GTX_euler_angles extension.
	template <typename T> 
	detail::tmat3x3<T> orientate3(detail::tvec3<T> const & angles);
		
	//! Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).
	//! From GLM_GTX_euler_angles extension.
	template <typename T> 
	detail::tmat4x4<T> orientate4(detail::tvec3<T> const & angles);

	/// @}
}//namespace euler_angles
}//namespace gtx
}//namespace glm

#include "euler_angles.inl"

namespace glm{using namespace gtx::euler_angles;}

#endif//glm_gtx_euler_angles