15#include <glm/gtc/quaternion.hpp>
17#include <glm/gtx/euler_angles.hpp>
21#define KR_SMALL_NUMBER (1.e-8f)
67 TRotator(glm::vec3 EulerAngles);
82 inline TRotator
Inverse()
const;
84 inline TRotator operator*(
const TRotator& Other)
const
89 inline glm::vec3 operator*(
const glm::vec3& Translation)
const
91 glm::mat4 transform = glm::eulerAngleYXZ(m_Pitch, m_Yaw, m_Roll);
92 glm::vec4 tempResult = transform * glm::vec4(Translation.x, Translation.y, Translation.z, 1.0f);
94 glm::vec3 returnVector(tempResult.x, tempResult.y, tempResult.z);
119 FTransform(glm::vec3 rotation, glm::vec3 translation, glm::vec3 scale3D);
121 inline const glm::vec3& GetLocation() {
return GetTranslation(); }
122 inline const TRotator& GetRotation()
const {
return m_Rotation; }
123 inline const glm::vec3& GetTranslation()
const {
return m_Translation; }
124 inline const glm::vec3& GetScale3D()
const {
return m_Scale3D; }
126 static FTransform Identity();
128 inline void SetScale3D(
const glm::vec3& newScale)
130 m_Scale3D = newScale;
133 inline void SetRotation(
const TRotator& newRotation)
135 m_Rotation = newRotation;
138 inline void SetTranslation(
const glm::vec3& newTranslation)
140 m_Translation = newTranslation;
143 FTransform GetRelativeTransform(
const FTransform& RelativeToWhat)
const;
152 FTransform
operator*(
const FTransform& Other)
const;
163 inline static void Multiply(FTransform* OutTransform,
const FTransform* A,
const FTransform* B);
165 inline bool AnyHasNegativeScale(
const glm::vec3& InScale3D,
const glm::vec3& InOtherScale3D)
const
167 return (InScale3D.x < 0.f || InScale3D.y < 0.f || InScale3D.z < 0.f
168 || InOtherScale3D.x < 0.f || InOtherScale3D.y < 0.f || InOtherScale3D.z < 0.f);
180 glm::vec3 SafeReciprocalScale;
182 if (glm::abs(InScale.x) <= Tolerance)
184 SafeReciprocalScale.x = 0.f;
188 SafeReciprocalScale.x = 1 / InScale.x;
191 if (glm::abs(InScale.y) <= Tolerance)
193 SafeReciprocalScale.y = 0.f;
197 SafeReciprocalScale.y = 1 / InScale.y;
200 if (glm::abs(InScale.z) <= Tolerance)
202 SafeReciprocalScale.z = 0.f;
206 SafeReciprocalScale.z = 1 / InScale.z;
209 return SafeReciprocalScale;
215 m_Translation = Other.GetTranslation();
221 m_Rotation = Other.GetRotation();
227 m_Scale3D = Other.GetScale3D();
237 glm::vec3 m_Translation;
#define KARMA_API
Defining Karma's API macro for storage class information.
Definition Core.h:41
#define FORCEINLINE
Typical inlining macro for clarity.
Definition Core.h:157
Definition Transform.h:35
glm::vec1 Y
Definition Transform.h:41
glm::vec1 Z
Definition Transform.h:44
glm::vec1 X
Definition Transform.h:38
glm::vec1 W
Definition Transform.h:47
Definition Transform.h:65
TRotator Inverse() const
Definition Transform.cpp:21
float m_Roll
Definition Transform.h:76
float m_Pitch
Definition Transform.h:70
float m_Yaw
Definition Transform.h:73