65
65
* rotates v around Z by c radians.
66
66
*/
67
67
68
- #define EulFrmS 0
69
- #define EulFrmR 1
70
- #define EulFrm (ord ) ((unsigned)(ord)&1)
71
- #define EulRepNo 0
72
- #define EulRepYes 1
73
68
#define EulRep (ord ) (((unsigned)(ord)>>1)&1)
74
- #define EulParEven 0
75
- #define EulParOdd 1
69
+ #define EulFrm (ord ) ((unsigned)(ord)&1)
76
70
#define EulPar (ord ) (((unsigned)(ord)>>2)&1)
77
71
78
72
/*! this code is merely a quick (and legal!) way to set arrays,
83
77
#define EulAxJ (ord ) ((int)(EulNext[EulAxI(ord)+(EulPar(ord)==EulParOdd)]))
84
78
#define EulAxK (ord ) ((int)(EulNext[EulAxI(ord)+(EulPar(ord)!=EulParOdd)]))
85
79
#define EulAxH (ord ) ((EulRep(ord)==EulRepNo)?EulAxK(ord):EulAxI(ord))
80
+
86
81
/*! EulGetOrd unpacks all useful information about order simultaneously. */
87
82
#define EulGetOrd (ord ,i ,j ,k ,h ,n ,s ,f ) \
88
83
{unsigned o=(unsigned)ord;f=o&1;o>>=1;s=o&1;o>>=1;\
89
84
n=o&1;o>>=1;i=EulSafe[o&3];j=EulNext[i+n];k=EulNext[i+1-n];h=s?k:i;}
90
- /*! EulOrd creates an order value between 0 and 23 from 4-tuple choices. */
91
- #define EulOrd (i ,p ,r ,f ) (((((((i)<<1)+(p))<<1)+(r))<<1)+(f))
92
-
93
- /* EulOrd first param: X = 0, Y = 1, Z = 2 */
94
-
95
- /*! Static axes */
96
- #define GLM_EUL_XYZs EulOrd(0,EulParEven,EulRepNo,EulFrmS)
97
- #define GLM_EUL_XYXs EulOrd(0,EulParEven,EulRepYes,EulFrmS)
98
- #define GLM_EUL_XZYs EulOrd(0,EulParOdd,EulRepNo,EulFrmS)
99
- #define GLM_EUL_XZXs EulOrd(0,EulParOdd,EulRepYes,EulFrmS)
100
- #define GLM_EUL_YZXs EulOrd(1,EulParEven,EulRepNo,EulFrmS)
101
- #define GLM_EUL_YZYs EulOrd(1,EulParEven,EulRepYes,EulFrmS)
102
- #define GLM_EUL_YXZs EulOrd(1,EulParOdd,EulRepNo,EulFrmS)
103
- #define GLM_EUL_YXYs EulOrd(1,EulParOdd,EulRepYes,EulFrmS)
104
- #define GLM_EUL_ZXYs EulOrd(2,EulParEven,EulRepNo,EulFrmS)
105
- #define GLM_EUL_ZXZs EulOrd(2,EulParEven,EulRepYes,EulFrmS)
106
- #define GLM_EUL_ZYXs EulOrd(2,EulParOdd,EulRepNo,EulFrmS)
107
- #define GLM_EUL_ZYZs EulOrd(2,EulParOdd,EulRepYes,EulFrmS)
108
-
109
- /*! Rotating axes */
110
- #define GLM_EUL_ZYXr EulOrd(0,EulParEven,EulRepNo,EulFrmR)
111
- #define GLM_EUL_XYXr EulOrd(0,EulParEven,EulRepYes,EulFrmR)
112
- #define GLM_EUL_YZXr EulOrd(0,EulParOdd,EulRepNo,EulFrmR)
113
- #define GLM_EUL_XZXr EulOrd(0,EulParOdd,EulRepYes,EulFrmR)
114
- #define GLM_EUL_XZYr EulOrd(1,EulParEven,EulRepNo,EulFrmR)
115
- #define GLM_EUL_YZYr EulOrd(1,EulParEven,EulRepYes,EulFrmR)
116
- #define GLM_EUL_ZXYr EulOrd(1,EulParOdd,EulRepNo,EulFrmR)
117
- #define GLM_EUL_YXYr EulOrd(1,EulParOdd,EulRepYes,EulFrmR)
118
- #define GLM_EUL_YXZr EulOrd(2,EulParEven,EulRepNo,EulFrmR)
119
- #define GLM_EUL_ZXZr EulOrd(2,EulParEven,EulRepYes,EulFrmR)
120
- #define GLM_EUL_XYZr EulOrd(2,EulParOdd,EulRepNo,EulFrmR)
121
- #define GLM_EUL_ZYZr EulOrd(2,EulParOdd,EulRepYes,EulFrmR)
85
+
86
+ typedef enum glm_eul_order {
87
+ /*! Static axes */
88
+ GLM_EUL_XYZs = 0 ,
89
+ GLM_EUL_XYXs = 2 ,
90
+ GLM_EUL_XZYs = 4 ,
91
+ GLM_EUL_XZXs = 6 ,
92
+ GLM_EUL_YZXs = 8 ,
93
+ GLM_EUL_YZYs = 10 ,
94
+ GLM_EUL_YXZs = 12 ,
95
+ GLM_EUL_YXYs = 14 ,
96
+ GLM_EUL_ZXYs = 16 ,
97
+ GLM_EUL_ZXZs = 18 ,
98
+ GLM_EUL_ZYXs = 20 ,
99
+ GLM_EUL_ZYZs = 22 ,
100
+
101
+ /*! Rotating axes */
102
+ GLM_EUL_ZYXr = 1 ,
103
+ GLM_EUL_XYXr = 3 ,
104
+ GLM_EUL_YZXr = 5 ,
105
+ GLM_EUL_XZXr = 7 ,
106
+ GLM_EUL_XZYr = 9 ,
107
+ GLM_EUL_YZYr = 11 ,
108
+ GLM_EUL_ZXYr = 13 ,
109
+ GLM_EUL_YXYr = 15 ,
110
+ GLM_EUL_YXZr = 17 ,
111
+ GLM_EUL_ZXZr = 19 ,
112
+ GLM_EUL_XYZr = 21 ,
113
+ GLM_EUL_ZYZr = 23
114
+ } glm_eul_order ;
122
115
123
116
/*!
124
117
* @brief build matrix from euler angles
125
118
*
126
- * @param[in] ea [Xangle, Yangle, Zangle, OrderCode ]
119
+ * @param[in] ea [Xangle, Yangle, Zangle]
127
120
* @param[out] dest rotation matrix
128
121
*/
129
122
CGLM_INLINE
130
123
void
131
- glm_eul_mat4 (vec3 ea , int order , mat4 dest ) {
124
+ glm_eul_mat4 (vec3 ea , glm_eul_order order , mat4 dest ) {
132
125
float ti , tj , th , ci , cj , ch , si , sj , sh , cc , cs , sc , ss ;
133
- int i , j , k , h , n , s , f ;
126
+ int i , j , k , h , parOdd , repYes , frmR ;
134
127
135
- EulGetOrd (order , i , j , k , h , n , s , f );
128
+ EulGetOrd (order , i , j , k , h , parOdd , repYes , frmR );
136
129
137
- if (f == EulFrmR )
130
+ if (frmR == 1 )
138
131
glm_swapf (& ea [0 ], & ea [2 ]);
139
132
140
- if (n == EulParOdd )
133
+ if (parOdd == 1 )
141
134
glm_vec3_negate (ea );
142
135
143
136
ti = ea [0 ]; tj = ea [1 ]; th = ea [2 ];
@@ -149,7 +142,7 @@ glm_eul_mat4(vec3 ea, int order, mat4 dest) {
149
142
cc = ci * ch ; cs = ci * sh ;
150
143
sc = si * ch ; ss = si * sh ;
151
144
152
- if (s == EulRepYes ) {
145
+ if (repYes == 1 ) {
153
146
dest [i ][i ] = cj ;
154
147
dest [i ][j ] = sj * si ;
155
148
dest [i ][k ] = sj * ci ;
0 commit comments