Faro Engine 0.0.0.b519570 (main)
Loading...
Searching...
No Matches
Vector3.hpp
Go to the documentation of this file.
1#pragma once
2#include "Vector2.hpp"
3#include "../Containers/String.hpp"
4
5namespace Faro
6{
7 template<class T>
8 struct Vector3
9 {
10 union
11 {
12 T f[3];
13 #pragma warning(suppress: 4201)
14 struct { T x, y, z; };
15 };
16
17 Vector3() { Clear(); }
18
19 Vector3(T x, T y, T z) : x(x), y(y), z(z) {}
20
21 Vector3(Vector2<T> v, T z) : x(v.x), y(v.y), z(z) {}
22
24 {
25 return { x, y };
26 }
27
29 {
30 return { y, z };
31 }
32
33 Vector3 operator+(const Vector3& v) const { return Vector3(x + v.x, y + v.y, z + v.z); }
34
35 Vector3 operator-(const Vector3& v) const { return Vector3(x - v.x, y - v.y, z - v.z); }
36
37 Vector3 operator*(const float value) const { return Vector3(x * value, y * value, z * value); }
38
39 Vector3 operator/(const float value) const { return Vector3(x / value, y / value, z / value); }
40
41 Vector3 operator-() const { return Vector3(-x, -y, -z); }
42
43 void operator+=(const Vector3& v) { x += v.x; y += v.y; z += v.z; }
44
45 void operator-=(const Vector3& v) { x -= v.x; y -= v.y; z -= v.z; }
46
47 void operator*=(const float value) { x *= value; y *= value; z *= value; }
48
49 Vector3 Cross(const Vector3& vector) const { return Vector3(y*vector.z - z * vector.y, z*vector.x - x * vector.z, x*vector.y - y * vector.x); }
50
51 float Dot(const Vector3& vector) const { return x * vector.x + y * vector.y + z * vector.z; }
52
53 T Magnitude() const { return std::sqrt(x*x + y * y + z * z); }
54
55 T SquareMagnitude() const { return x * x + y * y + z * z; }
56
57 void Normalize() { T l = Magnitude(); x /= l; y /= l; z /= l; }
58
59 Vector3 Normalized() { T l = Magnitude(); return Vector3(x /= l, y /= l, z /= l); }
60
61 bool operator==(const Vector3& other) const {
62 for (int i = 0; i < 3; i++) {
63 if (f[i] != other.f[i]) return false;
64 }
65 return true;
66 }
67
68 bool operator!=(const Vector3& other) const {
69 for (int i = 0; i < 3; i++) {
70 if (f[i] != other.f[i]) return true;
71 }
72 return false;
73 }
74
75 void Clear() { x = 0; y = 0; z = 0; }
76
77 Vector3 Lerp(const Vector3& r, float fact) const { return Vector3(x + ((r.x - x)*fact), y + ((r.y - y)*fact), z + ((r.z - z)*fact)); }
78
79 static Vector3 Up;
80 static Vector3 Down;
82 static Vector3 Back;
83 static Vector3 Left;
84 static Vector3 Right;
85
87 {
88 return "(x: " + Faro::ToString<T>(x) + ", y: " + Faro::ToString<T>(y) + ", z: " + Faro::ToString<T>(z) + ")";
89 }
90
91 template<class N> Vector3<N> ToType()
92 {
93 return Vector3<N>((N)x, (N)y, (N)z);
94 }
95
96 static Vector3 zero;
97 static Vector3 one;
98 };
99
100 template<class T> Vector3<T> Vector3<T>::zero = { 0, 0, 0 };
101 template<class T> Vector3<T> Vector3<T>::one = { 1, 1, 1 };
102
105
106}
Definition String.hpp:12
Definition Array.hpp:8
Vector3< int32 > Int3D
Definition Vector3.hpp:104
Vector3< float > Float3D
Definition Vector3.hpp:103
Definition Vector2.hpp:9
Definition Vector3.hpp:9
float Dot(const Vector3 &vector) const
Definition Vector3.hpp:51
void Normalize()
Definition Vector3.hpp:57
static Vector3 zero
Definition Vector3.hpp:96
static Vector3 Up
Definition Vector3.hpp:79
static Vector3 Forward
Definition Vector3.hpp:81
Vector2< T > yz()
Definition Vector3.hpp:28
T SquareMagnitude() const
Definition Vector3.hpp:55
bool operator==(const Vector3 &other) const
Definition Vector3.hpp:61
Vector3(Vector2< T > v, T z)
Definition Vector3.hpp:21
T Magnitude() const
Definition Vector3.hpp:53
void Clear()
Definition Vector3.hpp:75
T f[3]
Definition Vector3.hpp:12
Vector3(T x, T y, T z)
Definition Vector3.hpp:19
void operator*=(const float value)
Definition Vector3.hpp:47
Vector3 operator*(const float value) const
Definition Vector3.hpp:37
static Vector3 Right
Definition Vector3.hpp:84
static Vector3 Down
Definition Vector3.hpp:80
Vector3 operator+(const Vector3 &v) const
Definition Vector3.hpp:33
static Vector3 Left
Definition Vector3.hpp:83
bool operator!=(const Vector3 &other) const
Definition Vector3.hpp:68
T x
Definition Vector3.hpp:14
static Vector3 Back
Definition Vector3.hpp:82
Vector3 operator-() const
Definition Vector3.hpp:41
Vector3< N > ToType()
Definition Vector3.hpp:91
Vector3()
Definition Vector3.hpp:17
Vector2< T > xy()
Definition Vector3.hpp:23
Vector3 operator/(const float value) const
Definition Vector3.hpp:39
Vector3 Lerp(const Vector3 &r, float fact) const
Definition Vector3.hpp:77
String ToString()
Definition Vector3.hpp:86
Vector3 Normalized()
Definition Vector3.hpp:59
Vector3 Cross(const Vector3 &vector) const
Definition Vector3.hpp:49
void operator-=(const Vector3 &v)
Definition Vector3.hpp:45
Vector3 operator-(const Vector3 &v) const
Definition Vector3.hpp:35
static Vector3 one
Definition Vector3.hpp:97
T y
Definition Vector3.hpp:14
T z
Definition Vector3.hpp:14
void operator+=(const Vector3 &v)
Definition Vector3.hpp:43