Plasma Engine  2.0
Loading...
Searching...
No Matches
SimdTransform.h
1#pragma once
2
3#include <Foundation/SimdMath/SimdQuat.h>
4
5class PL_FOUNDATION_DLL plSimdTransform
6{
7public:
8 PL_DECLARE_POD_TYPE();
9
11 plSimdTransform(); // [tested]
12
14 explicit plSimdTransform(const plSimdVec4f& vPosition, const plSimdQuat& qRotation = plSimdQuat::MakeIdentity(), const plSimdVec4f& vScale = plSimdVec4f(1.0f)); // [tested]
15
17 explicit plSimdTransform(const plSimdQuat& qRotation); // [tested]
18
20 [[nodiscard]] static plSimdTransform Make(const plSimdVec4f& vPosition, const plSimdQuat& qRotation = plSimdQuat::MakeIdentity(), const plSimdVec4f& vScale = plSimdVec4f(1.0f)); // [tested]
21
23 [[nodiscard]] static plSimdTransform MakeIdentity(); // [tested]
24
26 [[nodiscard]] static plSimdTransform MakeLocalTransform(const plSimdTransform& globalTransformParent, const plSimdTransform& globalTransformChild); // [tested]
27
29 [[nodiscard]] static plSimdTransform MakeGlobalTransform(const plSimdTransform& globalTransformParent, const plSimdTransform& localTransformChild); // [tested]
30
32 plSimdFloat GetMaxScale() const; // [tested]
33
35 bool HasMirrorScaling() const;
36
38 bool ContainsUniformScale() const;
39
40public:
42 bool IsEqual(const plSimdTransform& rhs, const plSimdFloat& fEpsilon) const; // [tested]
43
44public:
46 void Invert(); // [tested]
47
49 plSimdTransform GetInverse() const; // [tested]
50
52 plSimdMat4f GetAsMat4() const; // [tested]
53
54public:
55 [[nodiscard]] plSimdVec4f TransformPosition(const plSimdVec4f& v) const; // [tested]
56 [[nodiscard]] plSimdVec4f TransformDirection(const plSimdVec4f& v) const; // [tested]
57
59 void operator*=(const plSimdTransform& other); // [tested]
60
62 void operator*=(const plSimdQuat& q); // [tested]
63
64 void operator+=(const plSimdVec4f& v); // [tested]
65 void operator-=(const plSimdVec4f& v); // [tested]
66
67public:
68 plSimdVec4f m_Position;
69 plSimdQuat m_Rotation;
70 plSimdVec4f m_Scale;
71};
72
73// *** free functions ***
74
76PL_ALWAYS_INLINE const plSimdVec4f operator*(const plSimdTransform& t, const plSimdVec4f& v); // [tested]
77
79PL_ALWAYS_INLINE const plSimdTransform operator*(const plSimdQuat& q, const plSimdTransform& t); // [tested]
80
82PL_ALWAYS_INLINE const plSimdTransform operator*(const plSimdTransform& t, const plSimdQuat& q); // [tested]
83
85PL_ALWAYS_INLINE const plSimdTransform operator+(const plSimdTransform& t, const plSimdVec4f& v); // [tested]
86
88PL_ALWAYS_INLINE const plSimdTransform operator-(const plSimdTransform& t, const plSimdVec4f& v); // [tested]
89
91PL_ALWAYS_INLINE const plSimdTransform operator*(const plSimdTransform& lhs, const plSimdTransform& rhs); // [tested]
92
93PL_ALWAYS_INLINE bool operator==(const plSimdTransform& t1, const plSimdTransform& t2); // [tested]
94PL_ALWAYS_INLINE bool operator!=(const plSimdTransform& t1, const plSimdTransform& t2); // [tested]
95
96
97#include <Foundation/SimdMath/Implementation/SimdTransform_inl.h>
Definition SimdFloat.h:7
A 4x4 matrix class.
Definition SimdMat4f.h:7
Definition SimdQuat.h:6
static const plSimdQuat MakeIdentity()
Static function that returns a quaternion that represents the identity rotation (none).
Definition SimdQuat_inl.h:10
Definition SimdTransform.h:6
plSimdTransform()
Default constructor: Does not do any initialization.
A 4-component SIMD vector class.
Definition SimdVec4f.h:8