Plasma Engine  2.0
Loading...
Searching...
No Matches
CoordinateSystem.h
1#pragma once
2
3#include <Foundation/Math/Vec3.h>
4
5#include <Core/World/Declarations.h>
6#include <Foundation/Types/RefCounted.h>
7
8struct PL_CORE_DLL plCoordinateSystem
9{
10 PL_DECLARE_POD_TYPE();
11
12 plVec3 m_vForwardDir;
13 plVec3 m_vRightDir;
14 plVec3 m_vUpDir;
15};
16
17class PL_CORE_DLL plCoordinateSystemProvider : public plRefCounted
18{
19public:
20 plCoordinateSystemProvider(const plWorld* pOwnerWorld)
21 : m_pOwnerWorld(pOwnerWorld)
22 {
23 }
24
25 virtual ~plCoordinateSystemProvider() = default;
26
27 virtual void GetCoordinateSystem(const plVec3& vGlobalPosition, plCoordinateSystem& out_coordinateSystem) const = 0;
28
29protected:
30 friend class plWorld;
31
32 const plWorld* m_pOwnerWorld;
33};
34
43{
44public:
46 plCoordinateSystemConversion(); // [tested]
47
49 void SetConversion(const plCoordinateSystem& source, const plCoordinateSystem& target); // [tested]
51 plVec3 ConvertSourcePosition(const plVec3& vPos) const; // [tested]
53 plQuat ConvertSourceRotation(const plQuat& qOrientation) const; // [tested]
55 float ConvertSourceLength(float fLength) const; // [tested]
56
58 plVec3 ConvertTargetPosition(const plVec3& vPos) const; // [tested]
60 plQuat ConvertTargetRotation(const plQuat& qOrientation) const; // [tested]
62 float ConvertTargetLength(float fLength) const; // [tested]
63
64private:
65 plMat3 m_mSourceToTarget;
66 plMat3 m_mTargetToSource;
67 float m_fWindingSwap = 1.0f;
68 float m_fSourceToTargetScale = 1.0f;
69 float m_fTargetToSourceScale = 1.0f;
70};
Helper class to convert between two plCoordinateSystem spaces.
Definition CoordinateSystem.h:43
Definition CoordinateSystem.h:18
Base class for reference counted objects.
Definition RefCounted.h:52
A world encapsulates a scene graph of game objects and various component managers and their component...
Definition World.h:22
Definition CoordinateSystem.h:9