Added OpenGL-like Vector constructors
Former-commit-id: 302389b6a915d66a0a0fb4cc9a748ed5266ae98c
This commit is contained in:
parent
0d143a64a2
commit
5daf09e41b
|
|
@ -9,6 +9,9 @@
|
|||
|
||||
#include <Nazara/Core/String.hpp>
|
||||
|
||||
template<typename T> class NzVector3;
|
||||
template<typename T> class NzVector4;
|
||||
|
||||
template<typename T>
|
||||
class NzVector2
|
||||
{
|
||||
|
|
@ -19,6 +22,8 @@ class NzVector2
|
|||
NzVector2(const T vec[2]);
|
||||
template<typename U> explicit NzVector2(const NzVector2<U>& vec);
|
||||
NzVector2(const NzVector2& vec) = default;
|
||||
explicit NzVector2(const NzVector3<T>& vec);
|
||||
explicit NzVector2(const NzVector4<T>& vec);
|
||||
~NzVector2() = default;
|
||||
|
||||
T AbsDotProduct(const NzVector2& vec) const;
|
||||
|
|
@ -48,6 +53,8 @@ class NzVector2
|
|||
NzVector2& Set(T scale);
|
||||
NzVector2& Set(const T vec[2]);
|
||||
NzVector2& Set(const NzVector2& vec);
|
||||
NzVector2& Set(const NzVector3<T>& vec);
|
||||
NzVector2& Set(const NzVector4<T>& vec);
|
||||
template<typename U> NzVector2& Set(const NzVector2<U>& vec);
|
||||
|
||||
T SquaredDistance(const NzVector2& vec) const;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,18 @@ NzVector2<T>::NzVector2(const NzVector2<U>& vec)
|
|||
Set(vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector2<T>::NzVector2(const NzVector3<T>& vec)
|
||||
{
|
||||
Set(vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector2<T>::NzVector2(const NzVector4<T>& vec)
|
||||
{
|
||||
Set(vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T NzVector2<T>::AbsDotProduct(const NzVector2& vec) const
|
||||
{
|
||||
|
|
@ -208,6 +220,24 @@ NzVector2<T>& NzVector2<T>::Set(const NzVector2<U>& vec)
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector2<T>& NzVector2<T>::Set(const NzVector3<T>& vec)
|
||||
{
|
||||
x = vec.x;
|
||||
y = vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector2<T>& NzVector2<T>::Set(const NzVector4<T>& vec)
|
||||
{
|
||||
x = vec.x;
|
||||
y = vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T NzVector2<T>::SquaredDistance(const NzVector2& vec) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,18 +8,23 @@
|
|||
#define NAZARA_VECTOR3_HPP
|
||||
|
||||
#include <Nazara/Core/String.hpp>
|
||||
#include <Nazara/Math/Vector2.hpp>
|
||||
|
||||
template<typename T> class NzVector3
|
||||
template<typename T> class NzVector2;
|
||||
template<typename T> class NzVector4;
|
||||
|
||||
template<typename T>
|
||||
class NzVector3
|
||||
{
|
||||
public:
|
||||
NzVector3() = default;
|
||||
NzVector3(T X, T Y, T Z);
|
||||
NzVector3(T X, const NzVector2<T>& vec);
|
||||
explicit NzVector3(T scale);
|
||||
NzVector3(const T vec[3]);
|
||||
NzVector3(const NzVector2<T>& vec, T Z = 0.0);
|
||||
template<typename U> explicit NzVector3(const NzVector3<U>& vec);
|
||||
NzVector3(const NzVector3& vec) = default;
|
||||
explicit NzVector3(const NzVector4<T>& vec);
|
||||
~NzVector3() = default;
|
||||
|
||||
T AbsDotProduct(const NzVector3& vec) const;
|
||||
|
|
@ -56,11 +61,13 @@ template<typename T> class NzVector3
|
|||
NzVector3& Normalize(T* length = nullptr);
|
||||
|
||||
NzVector3& Set(T X, T Y, T Z);
|
||||
NzVector3& Set(T X, const NzVector2<T>& vec);
|
||||
NzVector3& Set(T scale);
|
||||
NzVector3& Set(const T vec[3]);
|
||||
NzVector3& Set(const NzVector2<T>& vec, T Z = 0.0);
|
||||
NzVector3& Set(const NzVector3<T>& vec);
|
||||
template<typename U> NzVector3& Set(const NzVector3<U>& vec);
|
||||
NzVector3& Set(const NzVector4<T>& vec);
|
||||
|
||||
T SquaredDistance(const NzVector3& vec) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,12 @@ NzVector3<T>::NzVector3(T X, T Y, T Z)
|
|||
Set(X, Y, Z);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector3<T>::NzVector3(T X, const NzVector2<T>& vec)
|
||||
{
|
||||
Set(X, vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector3<T>::NzVector3(T scale)
|
||||
{
|
||||
|
|
@ -42,6 +48,12 @@ NzVector3<T>::NzVector3(const NzVector3<U>& vec)
|
|||
Set(vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector3<T>::NzVector3(const NzVector4<T>& vec)
|
||||
{
|
||||
Set(vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T NzVector3<T>::AbsDotProduct(const NzVector3& vec) const
|
||||
{
|
||||
|
|
@ -255,6 +267,16 @@ NzVector3<T>& NzVector3<T>::Set(T X, T Y, T Z)
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector3<T>& NzVector3<T>::Set(T X, const NzVector2<T>& vec)
|
||||
{
|
||||
x = X;
|
||||
y = vec.x;
|
||||
z = vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector3<T>& NzVector3<T>::Set(T scale)
|
||||
{
|
||||
|
|
@ -302,6 +324,16 @@ NzVector3<T>& NzVector3<T>::Set(const NzVector3<U>& vec)
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector3<T>& NzVector3<T>::Set(const NzVector4<T>& vec)
|
||||
{
|
||||
x = vec.x;
|
||||
y = vec.y;
|
||||
z = vec.z;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T NzVector3<T>::SquaredDistance(const NzVector3& vec) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,16 +8,23 @@
|
|||
#define NAZARA_VECTOR4_HPP
|
||||
|
||||
#include <Nazara/Core/String.hpp>
|
||||
#include <Nazara/Math/Vector3.hpp>
|
||||
|
||||
template<typename T> class NzVector4
|
||||
template<typename T> class NzVector2;
|
||||
template<typename T> class NzVector3;
|
||||
|
||||
template<typename T>
|
||||
class NzVector4
|
||||
{
|
||||
public:
|
||||
NzVector4() = default;
|
||||
NzVector4(T X, T Y, T Z, T W = 1.0);
|
||||
NzVector4(T X, T Y, const NzVector2<T>& vec);
|
||||
NzVector4(T X, const NzVector2<T>& vec, T W);
|
||||
NzVector4(T X, const NzVector3<T>& vec);
|
||||
explicit NzVector4(T scale);
|
||||
NzVector4(const T vec[4]);
|
||||
NzVector4(const NzVector3<T>& vec, T W = 1.0);
|
||||
NzVector4(const NzVector2<T>& vec, T Z = 0.0, T W = 1.0);
|
||||
NzVector4(const NzVector3<T>& vec, T W = 0.0);
|
||||
template<typename U> explicit NzVector4(const NzVector4<U>& vec);
|
||||
NzVector4(const NzVector4& vec) = default;
|
||||
~NzVector4() = default;
|
||||
|
|
@ -39,8 +46,12 @@ template<typename T> class NzVector4
|
|||
NzVector4& Normalize(T* length = nullptr);
|
||||
|
||||
NzVector4& Set(T X, T Y, T Z, T W = 1.0);
|
||||
NzVector4& Set(T X, T Y, const NzVector2<T>& vec);
|
||||
NzVector4& Set(T X, const NzVector2<T>& vec, T W);
|
||||
NzVector4& Set(T X, const NzVector3<T>& vec);
|
||||
NzVector4& Set(T scale);
|
||||
NzVector4& Set(const T vec[4]);
|
||||
NzVector4& Set(const NzVector2<T>& vec, T Z = 0.0, T W = 1.0);
|
||||
NzVector4& Set(const NzVector3<T>& vec, T W = 1.0);
|
||||
NzVector4& Set(const NzVector4<T>& vec);
|
||||
template<typename U> NzVector4& Set(const NzVector4<U>& vec);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,24 @@ NzVector4<T>::NzVector4(T X, T Y, T Z, T W)
|
|||
Set(X, Y, Z, W);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>::NzVector4(T X, T Y, const NzVector2<T>& vec)
|
||||
{
|
||||
Set(X, Y, vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>::NzVector4(T X, const NzVector2<T>& vec, T W)
|
||||
{
|
||||
Set(X, vec, W);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>::NzVector4(T X, const NzVector3<T>& vec)
|
||||
{
|
||||
Set(X, vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>::NzVector4(T scale)
|
||||
{
|
||||
|
|
@ -30,6 +48,12 @@ NzVector4<T>::NzVector4(const T vec[4])
|
|||
Set(vec);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>::NzVector4(const NzVector2<T>& vec, T Z, T W)
|
||||
{
|
||||
Set(vec, Z, W);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>::NzVector4(const NzVector3<T>& vec, T W)
|
||||
{
|
||||
|
|
@ -155,10 +179,43 @@ NzVector4<T>& NzVector4<T>::Normalize(T* length)
|
|||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(T X, T Y, T Z, T W)
|
||||
{
|
||||
w = W;
|
||||
x = X;
|
||||
y = Y;
|
||||
z = Z;
|
||||
w = W;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(T X, T Y, const NzVector2<T>& vec)
|
||||
{
|
||||
x = X;
|
||||
y = Y;
|
||||
z = vec.x;
|
||||
w = vec.y;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(T X, const NzVector2<T>& vec, T W)
|
||||
{
|
||||
x = X;
|
||||
y = vec.x;
|
||||
z = vec.y;
|
||||
w = W;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(T X, const NzVector3<T>& vec)
|
||||
{
|
||||
x = X;
|
||||
y = vec.x;
|
||||
z = vec.y;
|
||||
w = vec.z;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -166,10 +223,10 @@ NzVector4<T>& NzVector4<T>::Set(T X, T Y, T Z, T W)
|
|||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(T scale)
|
||||
{
|
||||
w = scale;
|
||||
x = scale;
|
||||
y = scale;
|
||||
z = scale;
|
||||
w = scale;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
@ -182,6 +239,17 @@ NzVector4<T>& NzVector4<T>::Set(const T vec[4])
|
|||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(const NzVector2<T>& vec, T Z, T W)
|
||||
{
|
||||
x = vec.x;
|
||||
y = vec.y;
|
||||
z = Z;
|
||||
w = W;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
NzVector4<T>& NzVector4<T>::Set(const NzVector3<T>& vec, T W)
|
||||
{
|
||||
|
|
@ -205,10 +273,10 @@ template<typename T>
|
|||
template<typename U>
|
||||
NzVector4<T>& NzVector4<T>::Set(const NzVector4<U>& vec)
|
||||
{
|
||||
w = F(vec.w);
|
||||
x = F(vec.x);
|
||||
y = F(vec.y);
|
||||
z = F(vec.z);
|
||||
w = F(vec.w);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue