29 #ifndef INCLUDED_QuaternionC_h_GUID_1470A5FE_8209_41A6_C19E_46077FDF9C66
30 #define INCLUDED_QuaternionC_h_GUID_1470A5FE_8209_41A6_C19E_46077FDF9C66
54 #define OSVR_QUAT_MEMBER(COMPONENT, INDEX) \
56 OSVR_INLINE double osvrQuatGet##COMPONENT(OSVR_Quaternion const *q) { \
57 return q->data[INDEX]; \
60 OSVR_INLINE void osvrQuatSet##COMPONENT(OSVR_Quaternion *q, double val) { \
61 q->data[INDEX] = val; \
64 OSVR_QUAT_MEMBER(W, 0)
65 OSVR_QUAT_MEMBER(X, 1)
66 OSVR_QUAT_MEMBER(Y, 2)
67 OSVR_QUAT_MEMBER(Z, 3)
69 #undef OSVR_QUAT_MEMBER
84 template <
typename StreamType>
85 inline StreamType &operator<<(StreamType &os,
OSVR_Quaternion const &quat) {
void osvrQuatSetZ(OSVR_Quaternion *q, double val)
Setter for quaternion component Z.
double osvrQuatGetY(OSVR_Quaternion const *q)
Accessor for quaternion component Y.
double data[4]
Internal data - direct access not recommended.
A structure defining a quaternion, often a unit quaternion representing 3D rotation.
void osvrQuatSetY(OSVR_Quaternion *q, double val)
Setter for quaternion component Y.
double osvrQuatGetX(OSVR_Quaternion const *q)
Accessor for quaternion component X.
void osvrQuatSetW(OSVR_Quaternion *q, double val)
Setter for quaternion component W.
Header providing basic C macros for defining API headers.
void osvrQuatSetX(OSVR_Quaternion *q, double val)
Setter for quaternion component X.
void osvrQuatSetIdentity(OSVR_Quaternion *q)
Set a quaternion to the identity rotation.
double osvrQuatGetW(OSVR_Quaternion const *q)
Accessor for quaternion component W.
double osvrQuatGetZ(OSVR_Quaternion const *q)
Accessor for quaternion component Z.
struct OSVR_Quaternion OSVR_Quaternion
A structure defining a quaternion, often a unit quaternion representing 3D rotation.