73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
#ifndef QUATERNION_H
|
|
#define QUATERNION_H
|
|
|
|
#pragma once
|
|
struct Vector3;
|
|
|
|
extern "C" {
|
|
typedef struct Quat {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
float w;
|
|
} Quat;
|
|
void CopyQuat(const Quat& q1, Quat& q2);
|
|
}
|
|
|
|
|
|
struct Quaternion : Quat {
|
|
public:
|
|
Quaternion();
|
|
Quaternion(float _x, float _y, float _z, float _w);
|
|
Quaternion(Vector3 _xyz, float _w);
|
|
Quaternion(Quat q);
|
|
~Quaternion();
|
|
|
|
const static Quaternion identity;
|
|
|
|
float GetLength() const;
|
|
float GetLengthSquared() const;
|
|
static float GetLengthSquared(const Quaternion& q);
|
|
void Normalize();
|
|
static Quaternion Normalize(const Quaternion& q);
|
|
static void Normalize(const Quaternion& q, Quaternion& result);
|
|
|
|
static float Dot(Quaternion a, Quaternion b);
|
|
|
|
static Vector3 ToAngles(const Quaternion& q1);
|
|
|
|
Vector3 operator *(const Vector3& p) const;
|
|
Quaternion operator *(const Quaternion& r2) const;
|
|
|
|
bool operator ==(const Quaternion& q);
|
|
|
|
static Quaternion Inverse(Quaternion r);
|
|
|
|
static Quaternion LookRotation(const Vector3& forward, const Vector3& upwards);
|
|
static Quaternion LookRotation(const Vector3& forward);
|
|
|
|
static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection);
|
|
|
|
static Quaternion RotateTowards(const Quaternion& from, const Quaternion& to, float maxDegreesDelta);
|
|
static Quaternion AngleAxis(float angle, const Vector3& axis);
|
|
void ToAngleAxis(float* angle, Vector3* axis);
|
|
static void ToAxisAngleRad(const Quaternion& q, Vector3* const axis, float* angle);
|
|
static float Angle(Quaternion a, Quaternion b);
|
|
static Quaternion Slerp(const Quaternion& a, const Quaternion& b, float t);
|
|
static Quaternion SlerpUnclamped(const Quaternion& a, const Quaternion& b, float t);
|
|
|
|
static Quaternion Euler(float x, float y, float z);
|
|
static Quaternion Euler(Vector3 euler);
|
|
static Quaternion FromEulerRad(Vector3 euler);
|
|
static float GetAngleAround(Vector3 axis, Quaternion rotation);
|
|
static Quaternion GetRotationAround(Vector3 axis, Quaternion rotation);
|
|
static void GetSwingTwist(Vector3 axis, Quaternion rotation, Quaternion* swing, Quaternion* twist);
|
|
public:
|
|
Vector3 xyz() const;
|
|
};
|
|
|
|
//#include "Vector3.h"
|
|
|
|
|
|
#endif
|