StevEngine
StevEngine is a customizable C++ game engine.
Loading...
Searching...
No Matches
Quaternion.hpp
1#pragma once
2#ifdef StevEngine_PHYSICS
3#include <Jolt/Jolt.h>
4#endif
5#include <string>
6
7#include "Vector3.hpp"
8
9namespace StevEngine::Utilities {
10 class Vector4;
11
19 class Quaternion {
20 public:
21 //Values
22 double W, X, Y, Z;
23
24 //Constructors
32 Quaternion(double w, double x, double y, double z);
33
39 Quaternion(double w, Vector3 vector);
40
45 Quaternion(const Quaternion& from);
46
48 Quaternion();
49
50 //Directions
55 Vector3 Forward() const;
56
61 Vector3 Right() const;
62
67 Vector3 Up() const;
68
74
80
81 //Functions
82 Quaternion Get() const;
83 double Magnitude() const;
85 Quaternion Normalized() const;
86
91 std::tuple<double, Vector3> GetAngleAxis() const;
92
93 //Operators
94 Quaternion operator+ (const Quaternion& other) const;
95 Quaternion operator- (const Quaternion& other) const;
96 Quaternion operator* (const Quaternion& other) const;
97 Quaternion operator* (const double& other) const;
98 Quaternion operator/ (const double& other) const;
99 Quaternion& operator*= (const Quaternion& other);
100 bool operator== (const Quaternion& other) const;
101
102 //Vector operators
108 Vector3 operator*(const Vector3& v) const;
109
110 //Conversions
111 explicit operator std::string() const;
112 explicit operator Vector4() const;
113
114 #ifdef StevEngine_PHYSICS
115 operator JPH::Quat() const;
116 Quaternion& operator= (const JPH::Quat& other);
117 Quaternion(const JPH::Quat& other);
118 #endif
119
120 //Static methods
127 static Quaternion FromAngleAxis(double angle, Vector3 axis);
128
135 static double Angle(const Quaternion& a, const Quaternion& b);
136
144 static Quaternion Lerp(const Quaternion& a, const Quaternion& b, double t);
145
153 static Quaternion Slerp(const Quaternion& a, const Quaternion& b, double t);
154
161 static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection);
162
169 static Quaternion LookRotation(Vector3 forward, const Vector3& upwards = Vector3::up);
170
176 static Quaternion Inverse(const Quaternion& q);
177
183 static Quaternion Conjugate(const Quaternion& q);
184
191 static double Dot(const Quaternion& a, const Quaternion& b);
192
198 static double DegreesToRadians(double degrees);
199
205 static double RadiansToDegrees(double radians);
206 };
207}
Vector3 Right() const
Get right direction.
Definition Quaternion.cpp:23
Quaternion operator-(const Quaternion &other) const
Subtraction.
Definition Quaternion.cpp:92
Quaternion operator*(const Quaternion &other) const
Quaternion multiplication.
Definition Quaternion.cpp:95
Vector3 Forward() const
Get forward direction.
Definition Quaternion.cpp:20
double Magnitude() const
Get magnitude.
Definition Quaternion.cpp:54
Quaternion Normalized() const
Get normalized copy.
Definition Quaternion.cpp:67
static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection)
Create rotation from start to end direction.
Definition Quaternion.cpp:185
Quaternion & Normalize()
Normalize this quaternion.
Definition Quaternion.cpp:57
Quaternion & operator*=(const Quaternion &other)
Quaternion multiply-assign.
Definition Quaternion.cpp:119
Quaternion(double w, double x, double y, double z)
Create quaternion from components.
Definition Quaternion.cpp:11
static Quaternion LookRotation(Vector3 forward, const Vector3 &upwards=Vector3::up)
Create rotation looking in direction.
Definition Quaternion.cpp:199
static double DegreesToRadians(double degrees)
Convert degrees to radians.
Definition Quaternion.cpp:222
Quaternion & Inverse()
Invert this quaternion.
Definition Quaternion.cpp:35
Quaternion & Conjugate()
Conjugate this quaternion.
Definition Quaternion.cpp:29
double Z
Quaternion components (w + xi + yj + zk)
Definition Quaternion.hpp:22
static double RadiansToDegrees(double radians)
Convert radians to degrees.
Definition Quaternion.cpp:225
static Quaternion Lerp(const Quaternion &a, const Quaternion &b, double t)
Linear interpolation between quaternions.
Definition Quaternion.cpp:177
static double Dot(const Quaternion &a, const Quaternion &b)
Calculate dot product.
Definition Quaternion.cpp:219
static Quaternion FromAngleAxis(double angle, Vector3 axis)
Create quaternion from angle and axis.
Definition Quaternion.cpp:165
std::tuple< double, Vector3 > GetAngleAxis() const
Get angle and axis representation.
Definition Quaternion.cpp:70
Quaternion operator+(const Quaternion &other) const
Addition.
Definition Quaternion.cpp:89
bool operator==(const Quaternion &other) const
Equality comparison.
Definition Quaternion.cpp:132
Quaternion Get() const
Get copy of this quaternion.
Definition Quaternion.cpp:51
static Quaternion Slerp(const Quaternion &a, const Quaternion &b, double t)
Spherical interpolation between quaternions.
Definition Quaternion.cpp:180
Quaternion & operator=(const JPH::Quat &other)
Assign from Jolt quaternion.
Definition Quaternion.cpp:150
Vector3 Up() const
Get up direction.
Definition Quaternion.cpp:26
static double Angle(const Quaternion &a, const Quaternion &b)
Get angle between quaternions.
Definition Quaternion.cpp:174
Quaternion()
Create identity quaternion.
Definition Quaternion.cpp:17
Quaternion operator/(const double &other) const
Scalar division.
Definition Quaternion.cpp:111
3D vector class
Definition Vector3.hpp:19
static const Vector3 up
Up vector (0,1,0)
Definition Vector3.hpp:85
4D vector class
Definition Vector4.hpp:14