summaryrefslogtreecommitdiff
path: root/src/modules/ray/ray_euler.h
blob: 39da17e73605ffef285c8921de8067b25e2fc9bc (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
#ifndef _RAY_EULER_H
#define _RAY_EULER_H

#include <math.h>

#include "ray_3f.h"

/* Desired order to apply euler angle rotations */
typedef enum ray_euler_order_t {
	RAY_EULER_ORDER_PYR,
	RAY_EULER_ORDER_YRP,
	RAY_EULER_ORDER_RPY,
	RAY_EULER_ORDER_PRY,
	RAY_EULER_ORDER_RYP,
	RAY_EULER_ORDER_YPR,
} ray_euler_order_t;

/* euler angles are convenient for describing orientation */
typedef struct ray_euler_t {
	ray_euler_order_t	order;	/* order to apply rotations in */
	float			pitch;	/* pitch in radiasn */
	float			yaw;	/* yaw in radians */
	float			roll;	/* roll in radians */
} ray_euler_t;


/* convenience macro for converting degrees to radians */
#define RAY_EULER_DEGREES(_deg) \
	(_deg * (2 * M_PI / 360.0f))

void ray_euler_basis(const ray_euler_t *e, ray_3f_t *forward, ray_3f_t *up, ray_3f_t *left);

#endif
© All Rights Reserved