OpenBarnyard
 
Loading...
Searching...
No Matches
TPlane.h
Go to the documentation of this file.
1#pragma once
2#include "TVector4.h"
3
5
6class TPlane
7{
8public:
15
16public:
17 constexpr TPlane() = default;
18
19 constexpr TPlane( const TVector4& a_PlaneData )
20 : m_Normal( a_PlaneData.AsVector3() ), m_fDistance( a_PlaneData.w )
21 {}
22
23 constexpr TPlane( const TVector3& a_Normal, TFLOAT a_fDistance )
24 : m_Normal( a_Normal ), m_fDistance( a_fDistance )
25 {}
26
27 constexpr TPlane( const TVector3& a_Normal, const TVector3& a_Point )
28 : m_Normal( a_Normal ), m_fDistance( TVector3::DotProduct( a_Normal, a_Point ) )
29 {}
30
31 constexpr TPlane( TFLOAT a_fNormalX, TFLOAT a_fNormalY, TFLOAT a_fNormalZ, TFLOAT a_fDistance )
32 : m_Normal( a_fNormalX, a_fNormalY, a_fNormalZ ), m_fDistance( a_fDistance )
33 {}
34
35 constexpr TPlane( const TPlane& a_Other )
36 : m_Normal( a_Other.m_Normal ), m_fDistance( a_Other.m_fDistance )
37 {}
38
39 constexpr void Set( const TVector4& a_PlaneData )
40 {
41 m_Normal = a_PlaneData.AsVector3();
42 m_fDistance = a_PlaneData.w;
43 }
44
45 constexpr void Set( const TVector3& a_Normal, TFLOAT a_fDistance )
46 {
47 m_Normal = a_Normal;
48 m_fDistance = a_fDistance;
49 }
50
51 constexpr void Set( const TVector3& a_Normal, const TVector3& a_Point )
52 {
53 m_Normal = a_Normal;
54 m_fDistance = TVector3::DotProduct( a_Normal, a_Point );
55 }
56
57 constexpr void Set( TFLOAT a_fNormalX, TFLOAT a_fNormalY, TFLOAT a_fNormalZ, TFLOAT a_fDistance )
58 {
59 m_Normal.Set( a_fNormalX, a_fNormalY, a_fNormalZ );
60 m_fDistance = a_fDistance;
61 }
62
63 constexpr void Set( const TPlane& a_Other )
64 {
65 m_Normal = a_Other.m_Normal;
66 m_fDistance = a_Other.m_fDistance;
67 }
68
69 TFORCEINLINE constexpr TFLOAT GetD() const
70 {
71 return m_fDistance;
72 }
73
74 TFORCEINLINE constexpr void SetD( TFLOAT a_fDistance )
75 {
76 m_fDistance = a_fDistance;
77 }
78
79 TFORCEINLINE constexpr const TVector3& GetNormal() const
80 {
81 return m_Normal;
82 }
83
84 TFORCEINLINE constexpr void SetNormal( const TVector3& a_rNormal )
85 {
86 m_Normal = a_rNormal;
87 }
88
89 TFORCEINLINE constexpr void SetNormal( TFLOAT a_fNormalX, TFLOAT a_fNormalY, TFLOAT a_fNormalZ )
90 {
91 m_Normal.Set( a_fNormalX, a_fNormalY, a_fNormalZ );
92 }
93
94 TFORCEINLINE void GetPoint( TVector3& a_rPoint )
95 {
96 a_rPoint.Multiply( m_Normal, m_fDistance );
97 }
98
99 TFORCEINLINE void SetPoint( const TVector3& a_rPoint )
100 {
101 m_fDistance = TVector3::DotProduct( m_Normal, a_rPoint );
102 }
103
104 TFORCEINLINE void Negate( const TPlane& a_rPlane )
105 {
106 AsVector4().Negate4( a_rPlane.AsVector4() );
107 }
108
110 {
111 AsVector4().Negate4();
112 }
113
114 constexpr TPlane& operator=( const TPlane& a_rPlane )
115 {
116 m_Normal = a_rPlane.m_Normal;
117 m_fDistance = a_rPlane.m_fDistance;
118 return *this;
119 }
120
121 TFORCEINLINE constexpr TVector3& AsNormal() { return m_Normal; }
122 TFORCEINLINE constexpr const TVector3& AsNormal() const { return m_Normal; }
123
125 TFORCEINLINE const TVector4& AsVector4() const { return *TREINTERPRETCAST( const TVector4*, this ); }
126
127private:
128 TVector3 m_Normal;
129 TFLOAT m_fDistance;
130};
131
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TFORCEINLINE
Definition Defines.h:74
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
float TFLOAT
Definition Typedefs.h:4
TFORCEINLINE const TVector4 & AsVector4() const
Definition TPlane.h:125
TFORCEINLINE void Negate()
Definition TPlane.h:109
constexpr void Set(const TVector4 &a_PlaneData)
Definition TPlane.h:39
TFORCEINLINE void SetPoint(const TVector3 &a_rPoint)
Definition TPlane.h:99
PlaneComparison
Definition TPlane.h:10
@ PlaneComparison_InBack
Definition TPlane.h:13
@ PlaneComparison_Intersects
Definition TPlane.h:12
@ PlaneComparison_InFront
Definition TPlane.h:11
constexpr TPlane(TFLOAT a_fNormalX, TFLOAT a_fNormalY, TFLOAT a_fNormalZ, TFLOAT a_fDistance)
Definition TPlane.h:31
TFORCEINLINE void GetPoint(TVector3 &a_rPoint)
Definition TPlane.h:94
TFORCEINLINE TVector4 & AsVector4()
Definition TPlane.h:124
constexpr void Set(const TVector3 &a_Normal, const TVector3 &a_Point)
Definition TPlane.h:51
TFORCEINLINE constexpr TVector3 & AsNormal()
Definition TPlane.h:121
TFORCEINLINE constexpr void SetNormal(TFLOAT a_fNormalX, TFLOAT a_fNormalY, TFLOAT a_fNormalZ)
Definition TPlane.h:89
TFORCEINLINE constexpr void SetNormal(const TVector3 &a_rNormal)
Definition TPlane.h:84
constexpr TPlane(const TVector3 &a_Normal, const TVector3 &a_Point)
Definition TPlane.h:27
constexpr TPlane & operator=(const TPlane &a_rPlane)
Definition TPlane.h:114
TFORCEINLINE constexpr TFLOAT GetD() const
Definition TPlane.h:69
TFORCEINLINE void Negate(const TPlane &a_rPlane)
Definition TPlane.h:104
constexpr void Set(TFLOAT a_fNormalX, TFLOAT a_fNormalY, TFLOAT a_fNormalZ, TFLOAT a_fDistance)
Definition TPlane.h:57
constexpr void Set(const TVector3 &a_Normal, TFLOAT a_fDistance)
Definition TPlane.h:45
constexpr void Set(const TPlane &a_Other)
Definition TPlane.h:63
TFORCEINLINE constexpr const TVector3 & GetNormal() const
Definition TPlane.h:79
TFORCEINLINE constexpr void SetD(TFLOAT a_fDistance)
Definition TPlane.h:74
constexpr TPlane(const TVector4 &a_PlaneData)
Definition TPlane.h:19
constexpr TPlane(const TVector3 &a_Normal, TFLOAT a_fDistance)
Definition TPlane.h:23
TFORCEINLINE constexpr const TVector3 & AsNormal() const
Definition TPlane.h:122
constexpr TPlane()=default
constexpr TPlane(const TPlane &a_Other)
Definition TPlane.h:35
constexpr void Multiply(const TVector3 &vec)
Definition TVector3.h:103
static constexpr TFLOAT DotProduct(const TVector3 &vec1, const TVector3 &vec2)
Definition TVector3.h:147
constexpr void Negate4(const TVector4 &vec)
Definition TVector4.h:274
TVector3 & AsVector3()
Definition TVector4.h:321
TFLOAT w
Definition TVector4.h:367