From 17e1e61ae52d7d0c69e4ed6a643c153ce89fc02e Mon Sep 17 00:00:00 2001
From: scorpioblood <77296181+scorpioblood@users.noreply.github.com>
Date: Fri, 31 May 2024 23:16:09 +0200
Subject: [PATCH] Make functions for unaligned TVector4 only.
---
.../Runtime/Core/public/Math/Vector4.hpp | 134 +++++++++---------
Tests/TestProject/Main.cpp | 32 -----
2 files changed, 67 insertions(+), 99 deletions(-)
delete mode 100644 Tests/TestProject/Main.cpp
diff --git a/Engine/Source/Runtime/Core/public/Math/Vector4.hpp b/Engine/Source/Runtime/Core/public/Math/Vector4.hpp
index 13ee614..0283756 100644
--- a/Engine/Source/Runtime/Core/public/Math/Vector4.hpp
+++ b/Engine/Source/Runtime/Core/public/Math/Vector4.hpp
@@ -391,8 +391,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Square of magnitude of vector.
- template
- T SqrMagnitude(const TVector4& v)
+ template
+ T SqrMagnitude(const TVector4& v)
{
return DotP(v, v);
}
@@ -404,8 +404,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Magnitude of vector.
- template
- constexpr T Length(const TVector4& v) { return Magnitude(v); }
+ template
+ constexpr T Length(const TVector4& v) { return Magnitude(v); }
///
/// Get square of magnitude of vector.
@@ -414,8 +414,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Square of magnitude of vector.
- template
- constexpr T SqrLength(const TVector4& v) { return SqrMagnitude(v); }
+ template
+ constexpr T SqrLength(const TVector4& v) { return SqrMagnitude(v); }
///
/// Angle between two vectors.
@@ -425,8 +425,8 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
///
- template
- T Angle(const TVector4& v1, const TVector4& v2)
+ template
+ T Angle(const TVector4& v1, const TVector4& v2)
{
return acos(DotP(v1, v2) / (Magnitude(v1) * Magnitude(v2)));
}
@@ -439,8 +439,8 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
///
- template
- T CosineAngle(const TVector4& v1, const TVector4& v2)
+ template
+ T CosineAngle(const TVector4& v1, const TVector4& v2)
{
return DotP(v1, v2) / (Magnitude(v1) * Magnitude(v2));
}
@@ -452,8 +452,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Normalized vector
- template
- TVector4 Normalize(const TVector4& v1)
+ template
+ TVector4 Normalize(const TVector4& v1)
{
T vecNorm = Magnitude(v1);
@@ -469,8 +469,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Copy of v1.
- template
- TVector4 NormalizeV(TVector4& v1)
+ template
+ TVector4 NormalizeV(TVector4& v1)
{
T vecNorm = Magnitude(v1);
@@ -489,8 +489,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Normalized vector
- template
- TVector4 UnsafeNormalize(const TVector4& v1)
+ template
+ TVector4 UnsafeNormalize(const TVector4& v1)
{
return v1 / Magnitude(v1);
}
@@ -503,8 +503,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Copy of v1.
- template
- TVector4 UnsafeNormalizeV(TVector4& v1)
+ template
+ TVector4 UnsafeNormalizeV(TVector4& v1)
{
v1 /= Magnitude(v1);
return v1;
@@ -518,8 +518,8 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
/// Dot product between vectors.
- template
- T DotP(const TVector4& v1, const TVector4& v2)
+ template
+ T DotP(const TVector4& v1, const TVector4& v2)
{
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + v1.w * v2.w;
}
@@ -532,10 +532,10 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
/// Vector with componentwise max of both vectors.
- template
- TVector4 Max(const TVector4& v1, const TVector4& v2)
+ template
+ TVector4 Max(const TVector4& v1, const TVector4& v2)
{
- return TVector4(
+ return TVector4(
(v1.x > v2.x) ? v1.x : v2.x,
(v1.y > v2.y) ? v1.y : v2.y,
(v1.z > v2.z) ? v1.z : v2.z,
@@ -551,8 +551,8 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
/// Copy of v1.
- template
- TVector4 MaxV(TVector4& v1, const TVector4& v2)
+ template
+ TVector4 MaxV(TVector4& v1, const TVector4& v2)
{
v1.x = (v1.x > v2.x) ? v1.x : v2.x;
v1.y = (v1.y > v2.y) ? v1.y : v2.y;
@@ -570,10 +570,10 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
/// Vector with componentwise max of both vectors.
- template
- TVector4 Min(const TVector4& v1, const TVector4& v2)
+ template
+ TVector4 Min(const TVector4& v1, const TVector4& v2)
{
- return TVector4(
+ return TVector4(
(v1.x < v2.x) ? v1.x : v2.x,
(v1.y < v2.y) ? v1.y : v2.y,
(v1.z < v2.z) ? v1.z : v2.z,
@@ -589,8 +589,8 @@ namespace Phanes::Core::Math
/// Vector one
/// Vector two
/// Copy of v1.
- template
- TVector4 MinV(TVector4& v1, const TVector4& v2)
+ template
+ TVector4 MinV(TVector4& v1, const TVector4& v2)
{
v1.x = (v1.x < v2.x) ? v1.x : v2.x;
v1.y = (v1.y < v2.y) ? v1.y : v2.y;
@@ -607,10 +607,10 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Inverted vector
- template
- TVector4 Negate(const TVector4& v1)
+ template
+ TVector4 Negate(const TVector4& v1)
{
- return TVector4(
+ return TVector4(
-v1.x,
-v1.y,
-v1.z,
@@ -625,8 +625,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Copy of v1.
- template
- TVector4 NegateV(TVector4& v1)
+ template
+ TVector4 NegateV(TVector4& v1)
{
v1.x = -v1.x;
v1.y = -v1.y;
@@ -641,10 +641,10 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Vector with reciprocal of components.
- template
- TVector4 CompInverse(const TVector4& v1)
+ template
+ TVector4 CompInverse(const TVector4& v1)
{
- return TVector4(
+ return TVector4(
(T)1.0 / v1.x,
(T)1.0 / v1.y,
(T)1.0 / v1.z,
@@ -659,8 +659,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Copy of v1.
- template
- TVector4 CompInverseV(TVector4& v1)
+ template
+ TVector4 CompInverseV(TVector4& v1)
{
v1.x = (T)1.0 / v1.x;
v1.y = (T)1.0 / v1.y;
@@ -678,11 +678,11 @@ namespace Phanes::Core::Math
///
///
/// Vector with magnitude clamped to s.
- template
- TVector4 ClampToMagnitude(const TVector4& v1, T s)
+ template
+ TVector4 ClampToMagnitude(const TVector4& v1, T s)
{
float vecNorm = Magnitude(v1);
- TVector4 newVec = (vecNorm > s) ? v1 : v1 / Magnitude(v1);
+ TVector4 newVec = (vecNorm > s) ? v1 : v1 / Magnitude(v1);
return newVec;
}
@@ -694,8 +694,8 @@ namespace Phanes::Core::Math
/// Vector
/// Magnitude
/// Copy of v1.
- template
- TVector4 ClampToMagnitudeV(TVector4& v1, T s)
+ template
+ TVector4 ClampToMagnitudeV(TVector4& v1, T s)
{
float vecNorm = Magnitude(v1);
v1 = (vecNorm > s) ? v1 : v1 / Magnitude(v1);
@@ -710,10 +710,10 @@ namespace Phanes::Core::Math
/// Vector
/// Magnitude
/// Vector with scaled magnitude.
- template
- TVector4 ScaleToMagnitude(const TVector4& v1, T s)
+ template
+ TVector4 ScaleToMagnitude(const TVector4& v1, T s)
{
- TVector4 vecDir = v1 / Magnitude(v1);
+ TVector4 vecDir = v1 / Magnitude(v1);
return vecDir * s;
}
@@ -725,8 +725,8 @@ namespace Phanes::Core::Math
/// Vector
/// Magnitude
/// Copy of v1.
- template
- TVector4 ScaleToMagnitudeV(TVector4& v1, T s)
+ template
+ TVector4 ScaleToMagnitudeV(TVector4& v1, T s)
{
v1 /= Magnitude(v1);
v1 *= s;
@@ -741,8 +741,8 @@ namespace Phanes::Core::Math
/// Vector
/// Planes normal
/// Reflected vector
- template
- TVector4 Reflect(const TVector4& v1, const TVector4 normal)
+ template
+ TVector4 Reflect(const TVector4& v1, const TVector4 normal)
{
return v1 - (2 * (v1 * normal) * normal);
}
@@ -755,8 +755,8 @@ namespace Phanes::Core::Math
/// Vector
/// Planes normal
/// Copy of v1.
- template
- TVector4 ReflectV(TVector4& v1, const TVector4 normal)
+ template
+ TVector4 ReflectV(TVector4& v1, const TVector4 normal)
{
Set(v1, v1 - (2 * (v1 * normal) * normal));
return v1;
@@ -770,8 +770,8 @@ namespace Phanes::Core::Math
/// Vector to project
/// Vector to project on
/// Projected vector.
- template
- TVector4 Project(const TVector4& v1, const TVector4 v2)
+ template
+ TVector4 Project(const TVector4& v1, const TVector4 v2)
{
return (DotP(v1, v2) / DotP(v2, v2)) * v2;
}
@@ -784,8 +784,8 @@ namespace Phanes::Core::Math
/// Vector to project
/// Vector to project on
/// Copy of v1.
- template
- TVector4 ProjectV(const TVector4& v1, const TVector4 v2)
+ template
+ TVector4 ProjectV(const TVector4& v1, const TVector4 v2)
{
Set(v1, (DotP(v1, v2) / DotP(v2, v2)) * v2);
}
@@ -798,8 +798,8 @@ namespace Phanes::Core::Math
/// Vector to reject
/// Vector to reject from
/// Rejected vector.
- template
- TVector4 Reject(const TVector4& v1, const TVector4 v2)
+ template
+ TVector4 Reject(const TVector4& v1, const TVector4 v2)
{
return v1 - (DotP(v1, v2) / DotP(v2, v2))* v2;
}
@@ -812,8 +812,8 @@ namespace Phanes::Core::Math
/// Vector to reject
/// Vector to reject from
/// Copy of v1.
- template
- TVector4 RejectV(const TVector4& v1, const TVector4 v2)
+ template
+ TVector4 RejectV(const TVector4& v1, const TVector4 v2)
{
Set(v1, v1 - (DotP(v1, v2) / DotP(v2, v2)) * v2);
@@ -827,11 +827,11 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Perspective divided vector.
- template
- TVector4 PrespectiveDivide(const TVector4& v1)
+ template
+ TVector4 PrespectiveDivide(const TVector4& v1)
{
float _1_w = (T)1.0 / v1.w;
- return TVector4(
+ return TVector4(
v1.x * _1_w,
v1.y * _1_w,
v1.z * _1_w,
@@ -846,8 +846,8 @@ namespace Phanes::Core::Math
/// Vector is aligned?
/// Vector
/// Copy of v1.
- template
- TVector4 PrespectiveDivideV(TVector4& v1)
+ template
+ TVector4 PrespectiveDivideV(TVector4& v1)
{
float _1_w = (T)1.0 / v1.w;
diff --git a/Tests/TestProject/Main.cpp b/Tests/TestProject/Main.cpp
deleted file mode 100644
index 2e891de..0000000
--- a/Tests/TestProject/Main.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include
-#include
-
-#include "Core/public/Math/Vector4.hpp"
-
-namespace PMath = Phanes::Core::Math;
-
-int main()
-{
- PMath::TVector4 vec0{ 3.4f, 2.3f, 1.2f, 7.5f };
- PMath::TVector4 vec1{ 7.5f, 3.4f, 2.7f, 2.6f };
-
-
- /*for (int i = 0; i < 10; i++)
- {
- auto start = std::chrono::high_resolution_clock::now();
-
- for (size_t i = 0; i < 999999; i++)
- {
-
- }
- auto end = std::chrono::high_resolution_clock::now();
-
- std::cout << std::chrono::duration_cast(end - start).count() << std::endl;
- }*/
- // vec0 += vec1;
-
- std::cout << vec0.x << " " << vec0.y << " " << vec0.z << " " << vec0.w << std::endl;
-
- return 0;
-
-}
\ No newline at end of file