Added OpenGL-like Vector constructors

Former-commit-id: 302389b6a915d66a0a0fb4cc9a748ed5266ae98c
This commit is contained in:
Lynix 2015-01-05 02:32:57 +01:00
parent 0d143a64a2
commit 5daf09e41b
6 changed files with 163 additions and 8 deletions

View File

@ -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;

View File

@ -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
{

View File

@ -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;

View File

@ -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
{

View File

@ -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);

View File

@ -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;
}