Big fixes.
This commit is contained in:
parent
6f3fd9053d
commit
0fe66ad44a
@ -38,7 +38,10 @@ namespace Phanes::Core::Math::Detail
|
|||||||
{
|
{
|
||||||
static constexpr void map(Phanes::Core::Math::TVector4<T, false>& v1, const TVector4<T, false>& v2)
|
static constexpr void map(Phanes::Core::Math::TVector4<T, false>& v1, const TVector4<T, false>& v2)
|
||||||
{
|
{
|
||||||
memcpy(v1.data, v2.data, 4 * sizeof(T));
|
v1.x = v2.x;
|
||||||
|
v1.y = v2.y;
|
||||||
|
v1.z = v2.z;
|
||||||
|
v1.w = v2.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,6 +86,18 @@ namespace Phanes::Core::Math {
|
|||||||
return "(" + ToString(v.x) + ", " + ToString(v.y) + ", " + ToString(v.z) + ")";
|
return "(" + ToString(v.x) + ", " + ToString(v.y) + ", " + ToString(v.z) + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<RealType T, bool S>
|
||||||
|
std::string ToString(const TVector4<T, S>& v)
|
||||||
|
{
|
||||||
|
return "(" + ToString(v.x) + ", " + ToString(v.y) + ", " + ToString(v.z) + ", " + ToString(v.w) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
template<IntType T, bool S>
|
||||||
|
std::string ToString(const TIntVector4<T, S>& v)
|
||||||
|
{
|
||||||
|
return "(" + ToString(v.x) + ", " + ToString(v.y) + ", " + ToString(v.z) + ", " + ToString(v.w) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
//std::string toString(const Vector4& v);
|
//std::string toString(const Vector4& v);
|
||||||
|
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ namespace Phanes::Core::Math {
|
|||||||
TVector2<T, false> NormalizeV(TVector2<T, false>& v1)
|
TVector2<T, false> NormalizeV(TVector2<T, false>& v1)
|
||||||
{
|
{
|
||||||
float vecNorm = Magnitude(v1);
|
float vecNorm = Magnitude(v1);
|
||||||
v1 /= (vecNorm < P_FLT_INAC) ? 1 : vecNorm;
|
v1 /= (vecNorm < P_FLT_INAC) ? (T)1.0 : vecNorm;
|
||||||
return v1;
|
return v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,7 +953,7 @@ namespace Phanes::Core::Math {
|
|||||||
TVector2<T, false> Normalize(const TVector2<T, false>& v1)
|
TVector2<T, false> Normalize(const TVector2<T, false>& v1)
|
||||||
{
|
{
|
||||||
float vecNorm = Magnitude(v1);
|
float vecNorm = Magnitude(v1);
|
||||||
return (vecNorm < P_FLT_INAC) ? PZeroVector2(T, false) : (v1 / vecNorm);
|
return (vecNorm < P_FLT_INAC) ? v1 : (v1 / vecNorm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -398,7 +398,7 @@ namespace Phanes::Core::Math {
|
|||||||
TVector3<T, false> NormalizeV(TVector3<T, false>& v1)
|
TVector3<T, false> NormalizeV(TVector3<T, false>& v1)
|
||||||
{
|
{
|
||||||
float vecNorm = Magnitude(v1);
|
float vecNorm = Magnitude(v1);
|
||||||
v1 /= (vecNorm < P_FLT_INAC) ? 1 : vecNorm;
|
v1 /= (vecNorm < P_FLT_INAC) ? (T)1.0 : vecNorm;
|
||||||
|
|
||||||
return v1;
|
return v1;
|
||||||
}
|
}
|
||||||
@ -914,7 +914,7 @@ namespace Phanes::Core::Math {
|
|||||||
template<RealType T>
|
template<RealType T>
|
||||||
inline bool IsNormalized(const TVector3<T, false>& v1, T threshold = P_FLT_INAC)
|
inline bool IsNormalized(const TVector3<T, false>& v1, T threshold = P_FLT_INAC)
|
||||||
{
|
{
|
||||||
return (abs(SqrMagnitude(v1) - 1) < threshold);
|
return (SqrMagnitude(v1) - 1 < threshold);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -962,7 +962,7 @@ namespace Phanes::Core::Math {
|
|||||||
TVector3<T, false> Normalize(const TVector3<T, false>& v1)
|
TVector3<T, false> Normalize(const TVector3<T, false>& v1)
|
||||||
{
|
{
|
||||||
float vecNorm = Magnitude(v1);
|
float vecNorm = Magnitude(v1);
|
||||||
return (vecNorm < P_FLT_INAC) ? PZeroVector3(T, false) : v1 / vecNorm;
|
return (vecNorm < P_FLT_INAC) ? v1 : v1 / vecNorm;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include "Core/public/Math/Vector2.hpp"
|
#include "Core/public/Math/Vector2.hpp"
|
||||||
|
|
||||||
#define PZeroVector4(type, aligned) Phanes::Core::Math::TVector4<##type, ##aligned>(0,0,0)
|
#define PZeroVector4(type, aligned) Phanes::Core::Math::TVector4<##type, ##aligned>(0,0,0,0)
|
||||||
|
|
||||||
namespace Phanes::Core::Math
|
namespace Phanes::Core::Math
|
||||||
{
|
{
|
||||||
@ -203,7 +203,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v2">Vector two</param>
|
/// <param name="v2">Vector two</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator+ (TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
TVector4<T, A> operator+ (const TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vector - scalar addition.
|
/// Vector - scalar addition.
|
||||||
@ -214,7 +214,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="s">Scalar</param>
|
/// <param name="s">Scalar</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator+ (TVector4<T, A>& v1, T s);
|
TVector4<T, A> operator+ (const TVector4<T, A>& v1, T s);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vector substraction.
|
/// Vector substraction.
|
||||||
@ -225,7 +225,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v2">Vector two</param>
|
/// <param name="v2">Vector two</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator- (TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
TVector4<T, A> operator- (const TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vector - scalar substraction.
|
/// Vector - scalar substraction.
|
||||||
@ -236,7 +236,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="s">Scalar</param>
|
/// <param name="s">Scalar</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator- (TVector4<T, A>& v1, T s);
|
TVector4<T, A> operator- (const TVector4<T, A>& v1, T s);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vector - scalar multiplication.
|
/// Vector - scalar multiplication.
|
||||||
@ -247,7 +247,10 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="s">Scalar</param>
|
/// <param name="s">Scalar</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator* (TVector4<T, A>& v1, T s);
|
TVector4<T, A> operator* (const TVector4<T, A>& v1, T s);
|
||||||
|
|
||||||
|
template<RealType T, bool A>
|
||||||
|
FORCEINLINE TVector4<T, A> operator* (T s, const TVector4<T, A>& v1) { return v1 * s; };
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Scale vector by another vector componentwise.
|
/// Scale vector by another vector componentwise.
|
||||||
@ -258,7 +261,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v2">Vector two</param>
|
/// <param name="v2">Vector two</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator* (TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
TVector4<T, A> operator* (const TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Vector - scalar division.
|
/// Vector - scalar division.
|
||||||
@ -269,7 +272,10 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="s">Scalar</param>
|
/// <param name="s">Scalar</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator/ (TVector4<T, A>& v1, T s);
|
TVector4<T, A> operator/ (const TVector4<T, A>& v1, T s);
|
||||||
|
|
||||||
|
template<RealType T, bool A>
|
||||||
|
FORCEINLINE TVector4<T, A> operator/ (T s, const TVector4<T, A>& v1) { return v1 / s; };
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Componentwise vector division.
|
/// Componentwise vector division.
|
||||||
@ -280,7 +286,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v2">Vector two</param>
|
/// <param name="v2">Vector two</param>
|
||||||
/// <returns>Computed vector.</returns>
|
/// <returns>Computed vector.</returns>
|
||||||
template<RealType T, bool A>
|
template<RealType T, bool A>
|
||||||
TVector4<T, A> operator/ (TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
TVector4<T, A> operator/ (const TVector4<T, A>& v1, const TVector4<T, A>& v2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -460,9 +466,9 @@ namespace Phanes::Core::Math
|
|||||||
{
|
{
|
||||||
T vecNorm = Magnitude(v1);
|
T vecNorm = Magnitude(v1);
|
||||||
|
|
||||||
vecNorm = (vecNorm < P_FLT_INAC) ? Magnitude(v1) : (T)1.0;
|
vecNorm = (vecNorm < P_FLT_INAC) ? (T)1.0 : vecNorm;
|
||||||
|
|
||||||
return v1 / vecNorm;
|
return (v1 / vecNorm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -477,7 +483,7 @@ namespace Phanes::Core::Math
|
|||||||
{
|
{
|
||||||
T vecNorm = Magnitude(v1);
|
T vecNorm = Magnitude(v1);
|
||||||
|
|
||||||
vecNorm = (vecNorm < P_FLT_INAC) ? Magnitude(v1) : (T)1.0;
|
vecNorm = (vecNorm < P_FLT_INAC) ? (T)1.0 : vecNorm;
|
||||||
|
|
||||||
v1 /= vecNorm;
|
v1 /= vecNorm;
|
||||||
|
|
||||||
@ -635,6 +641,8 @@ namespace Phanes::Core::Math
|
|||||||
v1.y = -v1.y;
|
v1.y = -v1.y;
|
||||||
v1.z = -v1.z;
|
v1.z = -v1.z;
|
||||||
v1.w = -v1.w;
|
v1.w = -v1.w;
|
||||||
|
|
||||||
|
return v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -686,7 +694,8 @@ namespace Phanes::Core::Math
|
|||||||
{
|
{
|
||||||
T magnitude = Magnitude(v1);
|
T magnitude = Magnitude(v1);
|
||||||
|
|
||||||
const TVector3<T, false> unitVec = (magnitude > P_FLT_INAC) ? v1 / magnitude : PZeroVector3(T, false);
|
TVector4<T, false> unitVec;
|
||||||
|
unitVec = (magnitude > P_FLT_INAC) ? v1 / magnitude : PZeroVector4(T, false);
|
||||||
|
|
||||||
Clamp(magnitude, min, max);
|
Clamp(magnitude, min, max);
|
||||||
|
|
||||||
@ -706,7 +715,7 @@ namespace Phanes::Core::Math
|
|||||||
{
|
{
|
||||||
T magnitude = Magnitude(v1);
|
T magnitude = Magnitude(v1);
|
||||||
|
|
||||||
v1 = (magnitude > P_FLT_INAC) ? v1 / magnitude : PZeroVector3(T, false);
|
v1 = (magnitude > P_FLT_INAC) ? v1 / magnitude : PZeroVector4(T, false);
|
||||||
|
|
||||||
v1 *= Clamp(magnitude, min, max);
|
v1 *= Clamp(magnitude, min, max);
|
||||||
|
|
||||||
@ -738,7 +747,8 @@ namespace Phanes::Core::Math
|
|||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> ScaleToMagnitudeV(TVector4<T, false>& v1, T s)
|
TVector4<T, false> ScaleToMagnitudeV(TVector4<T, false>& v1, T s)
|
||||||
{
|
{
|
||||||
NormalizeV(v1) *= s;
|
NormalizeV(v1);
|
||||||
|
v1 *= s;
|
||||||
return v1;
|
return v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -753,7 +763,7 @@ namespace Phanes::Core::Math
|
|||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> Reflect(const TVector4<T, false>& v1, const TVector4<T, false> normal)
|
TVector4<T, false> Reflect(const TVector4<T, false>& v1, const TVector4<T, false> normal)
|
||||||
{
|
{
|
||||||
return v1 - (2 * DotP(v1, normal) * normal);
|
return (2 * DotP(v1, normal) * normal) - v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -767,7 +777,7 @@ namespace Phanes::Core::Math
|
|||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> ReflectV(TVector4<T, false>& v1, const TVector4<T, false> normal)
|
TVector4<T, false> ReflectV(TVector4<T, false>& v1, const TVector4<T, false> normal)
|
||||||
{
|
{
|
||||||
Set(v1, v1 - (2 * DotP(v1, normal) * normal));
|
v1 = (2 * DotP(v1, normal) * normal) - v1;
|
||||||
return v1;
|
return v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,9 +804,11 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v2">Vector to project on</param>
|
/// <param name="v2">Vector to project on</param>
|
||||||
/// <returns>Copy of v1.</returns>
|
/// <returns>Copy of v1.</returns>
|
||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> ProjectV(const TVector4<T, false>& v1, const TVector4<T, false> v2)
|
TVector4<T, false> ProjectV(TVector4<T, false>& v1, const TVector4<T, false> v2)
|
||||||
{
|
{
|
||||||
Set(v1, (DotP(v1, v2) / DotP(v2, v2)) * v2);
|
v1 = (DotP(v1, v2) / DotP(v2, v2)) * v2;
|
||||||
|
|
||||||
|
return v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -822,9 +834,9 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v2">Vector to reject from</param>
|
/// <param name="v2">Vector to reject from</param>
|
||||||
/// <returns>Copy of v1.</returns>
|
/// <returns>Copy of v1.</returns>
|
||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> RejectV(const TVector4<T, false>& v1, const TVector4<T, false> v2)
|
TVector4<T, false> RejectV(TVector4<T, false>& v1, const TVector4<T, false> v2)
|
||||||
{
|
{
|
||||||
Set(v1, v1 - (DotP(v1, v2) / DotP(v2, v2)) * v2);
|
v1 = v1 - (DotP(v1, v2) / DotP(v2, v2)) * v2;
|
||||||
|
|
||||||
return v1;
|
return v1;
|
||||||
}
|
}
|
||||||
@ -837,7 +849,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v1">Vector</param>
|
/// <param name="v1">Vector</param>
|
||||||
/// <returns>Perspective divided vector.</returns>
|
/// <returns>Perspective divided vector.</returns>
|
||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> PrespectiveDivide(const TVector4<T, false>& v1)
|
TVector4<T, false> PerspectiveDivide(const TVector4<T, false>& v1)
|
||||||
{
|
{
|
||||||
float _1_w = (T)1.0 / v1.w;
|
float _1_w = (T)1.0 / v1.w;
|
||||||
return TVector4<T, false>(
|
return TVector4<T, false>(
|
||||||
@ -856,7 +868,7 @@ namespace Phanes::Core::Math
|
|||||||
/// <param name="v1">Vector</param>
|
/// <param name="v1">Vector</param>
|
||||||
/// <returns>Copy of v1.</returns>
|
/// <returns>Copy of v1.</returns>
|
||||||
template<RealType T>
|
template<RealType T>
|
||||||
TVector4<T, false> PrespectiveDivideV(TVector4<T, false>& v1)
|
TVector4<T, false> PerspectiveDivideV(TVector4<T, false>& v1)
|
||||||
{
|
{
|
||||||
float _1_w = (T)1.0 / v1.w;
|
float _1_w = (T)1.0 / v1.w;
|
||||||
|
|
||||||
@ -867,6 +879,47 @@ namespace Phanes::Core::Math
|
|||||||
|
|
||||||
return v1;
|
return v1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tests if vector is normalized.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Type of vector</typeparam>
|
||||||
|
/// <param name="v1">Vector</param>
|
||||||
|
/// <param name="threshold">Threshold to vector magnitude of 1.0</param>
|
||||||
|
/// <returns>True if vector is normalized, false if not.</returns>
|
||||||
|
template<RealType T>
|
||||||
|
FORCEINLINE TVector4<T, false> IsNormalized(const TVector4<T, false>& v1, T threshold = P_FLT_INAC)
|
||||||
|
{
|
||||||
|
return (SqrMagnitude(v1) - (T)1.0) < threshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tests if vectors are parallel.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Type of vector</typeparam>
|
||||||
|
/// <param name="v1">Vector</param>
|
||||||
|
/// <param name="v2">Vector</param>
|
||||||
|
/// <param name="threshold">Allowed T inaccuracy from one (e.g. 0.98f)</param>
|
||||||
|
/// <returns>True if parallel, false if not.</returns>
|
||||||
|
template<RealType T>
|
||||||
|
inline bool IsParallel(const TVector4<T, false>& v1, const TVector4<T, false>& v2, T threshold = 1.0f - P_FLT_INAC)
|
||||||
|
{
|
||||||
|
return (abs(DotP(v1, v2)) > threshold);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tests whether two vectors are coincident (Parallel and point in same direction).
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Type of vector</typeparam>
|
||||||
|
/// <param name="v1">Vector</param>
|
||||||
|
/// <param name="v2">Vector</param>
|
||||||
|
/// <param name="threshold">Allowed T inaccuracy from one (e.g. 0.98f)</param>
|
||||||
|
/// <returns>True if coincident, false if not.</returns>
|
||||||
|
template<RealType T>
|
||||||
|
inline bool IsCoincident(const TVector4<T, false>& v1, const TVector4<T, false>& v2, T threshold = 1.0f - P_FLT_INAC)
|
||||||
|
{
|
||||||
|
return (DotP(v1, v2) > threshold);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator+(TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
TVector4<T, S> operator+(const TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_add<T, S>::map(r, v1, v2);
|
Detail::compute_vec4_add<T, S>::map(r, v1, v2);
|
||||||
@ -106,7 +106,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator+(TVector4<T, S>& v1, T s)
|
TVector4<T, S> operator+(const TVector4<T, S>& v1, T s)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_add<T, S>::map(r, v1, s);
|
Detail::compute_vec4_add<T, S>::map(r, v1, s);
|
||||||
@ -114,7 +114,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator-(TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
TVector4<T, S> operator-(const TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_sub<T, S>::map(r, v1, v2);
|
Detail::compute_vec4_sub<T, S>::map(r, v1, v2);
|
||||||
@ -122,7 +122,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator-(TVector4<T, S>& v1, T s)
|
TVector4<T, S> operator-(const TVector4<T, S>& v1, T s)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_sub<T, S>::map(r, v1, s);
|
Detail::compute_vec4_sub<T, S>::map(r, v1, s);
|
||||||
@ -130,7 +130,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator*(TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
TVector4<T, S> operator*(const TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_mul<T, S>::map(r, v1, v2);
|
Detail::compute_vec4_mul<T, S>::map(r, v1, v2);
|
||||||
@ -138,7 +138,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator*(TVector4<T, S>& v1, T s)
|
TVector4<T, S> operator*(const TVector4<T, S>& v1, T s)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_mul<T, S>::map(r, v1, s);
|
Detail::compute_vec4_mul<T, S>::map(r, v1, s);
|
||||||
@ -146,7 +146,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator/(TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
TVector4<T, S> operator/(const TVector4<T, S>& v1, const TVector4<T, S>& v2)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_div<T, S>::map(r, v1, v2);
|
Detail::compute_vec4_div<T, S>::map(r, v1, v2);
|
||||||
@ -154,7 +154,7 @@ namespace Phanes::Core::Math
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<RealType T, bool S>
|
template<RealType T, bool S>
|
||||||
TVector4<T, S> operator/(TVector4<T, S>& v1, T s)
|
TVector4<T, S> operator/(const TVector4<T, S>& v1, T s)
|
||||||
{
|
{
|
||||||
TVector4<T, S> r;
|
TVector4<T, S> r;
|
||||||
Detail::compute_vec4_div<T, S>::map(r, v1, s);
|
Detail::compute_vec4_div<T, S>::map(r, v1, s);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user