summaryrefslogtreecommitdiff
path: root/include/dolphin/mtx/quat.h
blob: a5c1807182bf09c608ebfb4aa6ad7bc97f69d038 (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
#ifndef QUAT_H
#define QUAT_H

#include "dolphin/mtx/vec.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct Quaternion {
    f32 x, y, z, w;
} Quaternion;

void C_QUATMultiply(const Quaternion* a, const Quaternion* b, Quaternion* ab);
void PSQUATMultiply(const Quaternion* a, const Quaternion* b, Quaternion* ab);
void C_QUATNormalize(const Quaternion* src, Quaternion* unit);
void PSQUATNormalize(const Quaternion* src, Quaternion* unit);
void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad);
void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t);

/* When compiling in debug mode, use C implementations */
#if defined(DEBUG) || !defined(__MWERKS__)
#define QUATMultiply C_QUATMultiply
#define QUATNormalize C_QUATNormalize
#else
#define QUATMultiply PSQUATMultiply
#define QUATNormalize PSQUATNormalize
#endif

#define QUATRotAxisRad C_QUATRotAxisRad

#ifdef __cplusplus
};
#endif

#endif /* QUAT_H */