StevEngine
StevEngine is a customizable C++ game engine.
Loading...
Searching...
No Matches
Quaternion.hpp
1#pragma once
2#include "Vector3.hpp"
3
4#include <string>
5
6
7namespace StevEngine::Utilities {
8 class Vector4;
9
17 class Quaternion {
18 public:
19 //Values
20 double W, X, Y, Z;
21
22 //Constructors
30 Quaternion(double w, double x, double y, double z);
31
37 Quaternion(double w, Vector3 vector);
38
43 Quaternion(const Quaternion& from);
44
46 Quaternion();
47
48 //Directions
53 Vector3 Forward() const;
54
59 Vector3 Right() const;
60
65 Vector3 Up() const;
66
72
78
79 //Functions
80 Quaternion Get() const;
81 double Magnitude() const;
83 Quaternion Normalized() const;
84
89 std::tuple<double, Vector3> GetAngleAxis() const;
90
91 //Operators
92 Quaternion operator+ (const Quaternion& other) const;
93 Quaternion operator- (const Quaternion& other) const;
94 Quaternion operator* (const Quaternion& other) const;
95 Quaternion operator* (const double& other) const;
96 Quaternion operator/ (const double& other) const;
97 Quaternion& operator*= (const Quaternion& other);
98 bool operator== (const Quaternion& other) const;
99
100 //Vector operators
106 Vector3 operator*(const Vector3& v) const;
107
108 //Conversions
109 explicit operator std::string() const;
110 explicit operator Vector4() const;
111
112 #ifdef StevEngine_PHYSICS
113 operator JPH::Quat() const;
114 Quaternion& operator= (const JPH::Quat& other);
115 Quaternion(const JPH::Quat& other);
116 #endif
117
118 //Static methods
125 static Quaternion FromAngleAxis(double angle, Vector3 axis);
126
133 static double Angle(const Quaternion& a, const Quaternion& b);
134
142 static Quaternion Lerp(const Quaternion& a, const Quaternion& b, double t);
143
151 static Quaternion Slerp(const Quaternion& a, const Quaternion& b, double t);
152
159 static Quaternion FromToRotation(Vector3 fromDirection, Vector3 toDirection);
160
167 static Quaternion LookRotation(Vector3 forward, const Vector3& upwards = Vector3::up);
168
174 static Quaternion Inverse(const Quaternion& q);
175
181 static Quaternion Conjugate(const Quaternion& q);
182
189 static double Dot(const Quaternion& a, const Quaternion& b);
190
196 static double DegreesToRadians(double degrees);
197
203 static double RadiansToDegrees(double radians);
204 };
205}
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:20
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:17
static const Vector3 up
Up vector (0,1,0)
Definition Vector3.hpp:85
4D vector class
Definition Vector4.hpp:14