OpenBarnyard
 
Loading...
Searching...
No Matches
TVector3.cpp
Go to the documentation of this file.
1#include "ToshiPCH.h"
2#include "TVector3.h"
3
5
6constinit const TVector3 TVector3::VEC_ZERO = TVector3( 0, 0, 0 );
7constinit const TVector3 TVector3::VEC_POSX = TVector3( 1, 0, 0 );
8constinit const TVector3 TVector3::VEC_POSY = TVector3( 0, 1, 0 );
9constinit const TVector3 TVector3::VEC_POSZ = TVector3( 0, 0, 1 );
10constinit const TVector3 TVector3::VEC_NEGX = TVector3( -1, 0, 0 );
11constinit const TVector3 TVector3::VEC_NEGY = TVector3( 0, -1, 0 );
12constinit const TVector3 TVector3::VEC_NEGZ = TVector3( 0, 0, -1 );
17
18void TVector3::Clip( TFLOAT fVal, TFLOAT fVal2 )
19{
20 TMath::Clip( x, fVal, fVal2 );
21 TMath::Clip( y, fVal, fVal2 );
22 TMath::Clip( z, fVal, fVal2 );
23}
24
25void TVector3::CrossProduct( const TVector3& vec1, const TVector3& vec2 )
26{
27 TFLOAT fX = vec2.z * vec1.y - vec2.y * vec1.z;
28 TFLOAT fY = vec1.z * vec2.x - vec2.z * vec1.x;
29 TFLOAT fZ = vec1.x * vec2.y - vec1.y * vec2.x;
30 Set( fX, fY, fZ );
31}
32
33// $Barnyard: FUNCTION 006cbbe0
34void TVector3::RotateX( TFLOAT a_fRotation )
35{
36 TFLOAT f1;
37 TFLOAT f2;
38 TFLOAT oldY = y;
39
40 TMath::SinCos( a_fRotation, f1, f2 );
41
42 y = -f1 * z + f2 * oldY;
43 z = oldY * f1 + z * f2;
44}
45
46// $Barnyard: FUNCTION 006c7820
47void TVector3::RotateY( TFLOAT a_fRotation )
48{
49 TFLOAT f1;
50 TFLOAT f2;
51 TFLOAT oldX = x;
52
53 TMath::SinCos( a_fRotation, f1, f2 );
54
55 x = f1 * z + f2 * oldX;
56 z = z * f2 + -f1 * oldX;
57}
58
59void TVector3::RotateZ( TFLOAT a_fRotation )
60{
61 TFLOAT f1;
62 TFLOAT f2;
63 TFLOAT oldX = x;
64
65 TMath::SinCos( a_fRotation, f1, f2 );
66
67 x = -f1 * y + f2 * oldX;
68 y = f1 * oldX + y * f2;
69}
70
72{
73 if ( MagnitudeSq() != 0.0f )
74 {
75 TFLOAT magnitude = TMath::OneOverSqrt( MagnitudeSq() );
76 Set( x * magnitude, y * magnitude, z * magnitude );
77 }
78 else
79 {
80 Set( 0.0f, 0.0f, 1.0f );
81 }
82}
83
3D vector implementation for the Toshi engine
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
float TFLOAT
Definition Typedefs.h:4
TFORCEINLINE void SinCos(TFLOAT fVal, TFLOAT &a_rSin, TFLOAT &a_rCos)
constexpr TFLOAT ONEOVER_SQRT_TWO
Definition TMathInline.h:38
TFORCEINLINE void Clip(T &rVal, const T &Min, const T &Max)
TFORCEINLINE TFLOAT OneOverSqrt(TFLOAT a_fX)
Definition TMathInline.h:92
static constinit const TVector3 VEC_ZERO
Definition TVector3.h:150
static constinit const TVector3 VEC_NEGXPOSZ
Definition TVector3.h:157
static constinit const TVector3 VEC_NEGZ
Definition TVector3.h:156
void CrossProduct(const TVector3 &, const TVector3 &)
Definition TVector3.cpp:25
static constinit const TVector3 VEC_POSZ
Definition TVector3.h:153
static constinit const TVector3 VEC_POSY
Definition TVector3.h:152
TFLOAT y
Definition TVector3.h:163
constexpr TFLOAT MagnitudeSq() const
Definition TVector3.h:133
void RotateZ(TFLOAT a_fRotation)
Definition TVector3.cpp:59
void RotateX(TFLOAT a_fRotation)
Definition TVector3.cpp:34
constexpr TVector3()=default
static constinit const TVector3 VEC_POSX
Definition TVector3.h:151
constexpr void Set(const TVector3 &vec)
Definition TVector3.h:33
TFLOAT z
Definition TVector3.h:163
TFLOAT x
Definition TVector3.h:163
static constinit const TVector3 VEC_POSXNEGZ
Definition TVector3.h:160
static constinit const TVector3 VEC_POSXPOSZ
Definition TVector3.h:159
void RotateY(TFLOAT a_fRotation)
Definition TVector3.cpp:47
void Normalize()
Definition TVector3.cpp:71
static constinit const TVector3 VEC_NEGXNEGZ
Definition TVector3.h:158
static constinit const TVector3 VEC_NEGX
Definition TVector3.h:154
static constinit const TVector3 VEC_NEGY
Definition TVector3.h:155
void Clip(TFLOAT fVal, TFLOAT fVal2)
Definition TVector3.cpp:18