diff options
author | chai <chaifix@163.com> | 2018-11-18 23:31:17 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-11-18 23:31:17 +0800 |
commit | f0f340dec7821cee103ab9267ef941a917ef4dc4 (patch) | |
tree | 2f77f6ce6bdc9f63f002c13d4c261e1d6a9c1729 /src/libjin/math | |
parent | fc7b4579e49aaeecc81919e247e03f68bd5abfd4 (diff) |
*目录改为小写
Diffstat (limited to 'src/libjin/math')
-rw-r--r-- | src/libjin/math/README.md | 1 | ||||
-rw-r--r-- | src/libjin/math/je_bezier_curve.cpp | 0 | ||||
-rw-r--r-- | src/libjin/math/je_bezier_curve.h | 17 | ||||
-rw-r--r-- | src/libjin/math/je_constant.h | 10 | ||||
-rw-r--r-- | src/libjin/math/je_ellipse.cpp | 0 | ||||
-rw-r--r-- | src/libjin/math/je_ellipse.h | 0 | ||||
-rw-r--r-- | src/libjin/math/je_math.h | 83 | ||||
-rw-r--r-- | src/libjin/math/je_matrix.cpp | 194 | ||||
-rw-r--r-- | src/libjin/math/je_matrix.h | 159 | ||||
-rw-r--r-- | src/libjin/math/je_quad.h | 23 | ||||
-rw-r--r-- | src/libjin/math/je_random.cpp | 52 | ||||
-rw-r--r-- | src/libjin/math/je_random.h | 33 | ||||
-rw-r--r-- | src/libjin/math/je_transform.cpp | 99 | ||||
-rw-r--r-- | src/libjin/math/je_transform.h | 49 | ||||
-rw-r--r-- | src/libjin/math/je_vector2.hpp | 63 | ||||
-rw-r--r-- | src/libjin/math/je_vector3.hpp | 41 | ||||
-rw-r--r-- | src/libjin/math/je_vector4.hpp | 45 |
17 files changed, 869 insertions, 0 deletions
diff --git a/src/libjin/math/README.md b/src/libjin/math/README.md new file mode 100644 index 0000000..a096332 --- /dev/null +++ b/src/libjin/math/README.md @@ -0,0 +1 @@ +ļռΪJinEngineڴģ乲õ
\ No newline at end of file diff --git a/src/libjin/math/je_bezier_curve.cpp b/src/libjin/math/je_bezier_curve.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/libjin/math/je_bezier_curve.cpp diff --git a/src/libjin/math/je_bezier_curve.h b/src/libjin/math/je_bezier_curve.h new file mode 100644 index 0000000..6925baf --- /dev/null +++ b/src/libjin/math/je_bezier_curve.h @@ -0,0 +1,17 @@ +#ifndef __JIN_BEZIER_CURVE_H__ +#define __JIN_BEZIER_CURVE_H__ + +namespace JinEngine +{ + namespace Math + { + + class BezierCurve + { + + }; + + } // namespace Math +} // namespace JinEngine + +#endif
\ No newline at end of file diff --git a/src/libjin/math/je_constant.h b/src/libjin/math/je_constant.h new file mode 100644 index 0000000..45577e7 --- /dev/null +++ b/src/libjin/math/je_constant.h @@ -0,0 +1,10 @@ +#ifndef __JE_MATH_CONSTANT_H__ +#define __JE_MATH_CONSTANT_H__ + +#define PI 3.1415926f + +// int16 Χ +#define INT16_RANGE_LEFT -32768 +#define INT16_RANGE_RIGHT 32767 + +#endif
\ No newline at end of file diff --git a/src/libjin/math/je_ellipse.cpp b/src/libjin/math/je_ellipse.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/libjin/math/je_ellipse.cpp diff --git a/src/libjin/math/je_ellipse.h b/src/libjin/math/je_ellipse.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/libjin/math/je_ellipse.h diff --git a/src/libjin/math/je_math.h b/src/libjin/math/je_math.h new file mode 100644 index 0000000..de57e36 --- /dev/null +++ b/src/libjin/math/je_math.h @@ -0,0 +1,83 @@ +#ifndef __JE_UTILS_MATH_H__ +#define __JE_UTILS_MATH_H__ + +#include "je_constant.h" +#include "je_matrix.h" +#include "je_quad.h" + +namespace JinEngine +{ + namespace Math + { + + #ifdef min + #undef min + #endif // min + #ifdef max + #undef max + #endif // max + + template<typename T> + inline T min(T a, T b) + { + return a < b ? a : b; + } + + template<typename T> + inline T max(T a, T b) + { + return a > b ? a : b; + } + + template<typename T> + inline T clamp(T a, T mi, T ma) + { + return min<T>(max<T>(a, mi), ma); + } + + template<typename T> + inline bool within(T a, T mi, T ma) + { + return a >= mi && a <= ma; + } + + template<typename T> + inline bool without(T a, T mi, T ma) + { + return a < mi || a > ma; + } + + template<typename T> + inline T abs(T a) + { + return a > 0 ? a : -a; + } + + template<typename T> + inline T lowerBound(T a, T lower) + { + return a < lower ? lower : a; + } + + template<typename T> + inline T upperBound(T a, T upper) + { + return a > upper ? upper : a; + } + + template<typename T> + inline T lerp(T a, T b, float t) + { + return a + t * (b - a); + } + + inline float lerp(float a, float b, float f) + { + f = clamp<float>(f, 0, 1); + return a + f * (b - a); + } + + } // namespace Math +} // namespace JinEngine + +#endif // __JE_UTILS_MATH_H__ diff --git a/src/libjin/math/je_matrix.cpp b/src/libjin/math/je_matrix.cpp new file mode 100644 index 0000000..bc1fcea --- /dev/null +++ b/src/libjin/math/je_matrix.cpp @@ -0,0 +1,194 @@ +#include "je_matrix.h" + +#include <cstring> // memcpy +#include <cmath> + +namespace JinEngine +{ + namespace Math + { + + const Matrix Matrix::Identity; + + // | e0 e4 e8 e12 | + // | e1 e5 e9 e13 | + // | e2 e6 e10 e14 | + // | e3 e7 e11 e15 | + + Matrix::Matrix() + { + setIdentity(); + } + + Matrix::~Matrix() + { + } + + void Matrix::setOrtho(float l, float r, float b, float t, float n, float f) + { + setIdentity(); + float w = r - l; + float h = t - b; + float z = f - n; + e[0] = 2 / w; + e[5] = 2 / h; + e[10] = -2 / z; + e[12] = -(r + l) / w; + e[13] = -(t + b) / h; + e[14] = -(f + n) / z; + e[15] = 1; + } + + // | e0 e4 e8 e12 | + // | e1 e5 e9 e13 | + // | e2 e6 e10 e14 | + // | e3 e7 e11 e15 | + // | e0 e4 e8 e12 | + // | e1 e5 e9 e13 | + // | e2 e6 e10 e14 | + // | e3 e7 e11 e15 | + + Matrix Matrix::operator * (const Matrix & m) const + { + Matrix t; + + t.e[0] = (e[0] * m.e[0]) + (e[4] * m.e[1]) + (e[8] * m.e[2]) + (e[12] * m.e[3]); + t.e[4] = (e[0] * m.e[4]) + (e[4] * m.e[5]) + (e[8] * m.e[6]) + (e[12] * m.e[7]); + t.e[8] = (e[0] * m.e[8]) + (e[4] * m.e[9]) + (e[8] * m.e[10]) + (e[12] * m.e[11]); + t.e[12] = (e[0] * m.e[12]) + (e[4] * m.e[13]) + (e[8] * m.e[14]) + (e[12] * m.e[15]); + + t.e[1] = (e[1] * m.e[0]) + (e[5] * m.e[1]) + (e[9] * m.e[2]) + (e[13] * m.e[3]); + t.e[5] = (e[1] * m.e[4]) + (e[5] * m.e[5]) + (e[9] * m.e[6]) + (e[13] * m.e[7]); + t.e[9] = (e[1] * m.e[8]) + (e[5] * m.e[9]) + (e[9] * m.e[10]) + (e[13] * m.e[11]); + t.e[13] = (e[1] * m.e[12]) + (e[5] * m.e[13]) + (e[9] * m.e[14]) + (e[13] * m.e[15]); + + t.e[2] = (e[2] * m.e[0]) + (e[6] * m.e[1]) + (e[10] * m.e[2]) + (e[14] * m.e[3]); + t.e[6] = (e[2] * m.e[4]) + (e[6] * m.e[5]) + (e[10] * m.e[6]) + (e[14] * m.e[7]); + t.e[10] = (e[2] * m.e[8]) + (e[6] * m.e[9]) + (e[10] * m.e[10]) + (e[14] * m.e[11]); + t.e[14] = (e[2] * m.e[12]) + (e[6] * m.e[13]) + (e[10] * m.e[14]) + (e[14] * m.e[15]); + + t.e[3] = (e[3] * m.e[0]) + (e[7] * m.e[1]) + (e[11] * m.e[2]) + (e[15] * m.e[3]); + t.e[7] = (e[3] * m.e[4]) + (e[7] * m.e[5]) + (e[11] * m.e[6]) + (e[15] * m.e[7]); + t.e[11] = (e[3] * m.e[8]) + (e[7] * m.e[9]) + (e[11] * m.e[10]) + (e[15] * m.e[11]); + t.e[15] = (e[3] * m.e[12]) + (e[7] * m.e[13]) + (e[11] * m.e[14]) + (e[15] * m.e[15]); + + return t; + } + + void Matrix::operator *= (const Matrix & m) + { + Matrix t = (*this) * m; + memcpy((void*)this->e, (void*)t.e, sizeof(float) * 16); + } + + const float * Matrix::getElements() const + { + return e; + } + + void Matrix::setIdentity() + { + memset(e, 0, sizeof(float) * 16); + e[0] = e[5] = e[10] = e[15] = 1; + } + + void Matrix::setTranslation(float x, float y) + { + setIdentity(); + e[12] = x; + e[13] = y; + } + + void Matrix::setRotation(float rad) + { + setIdentity(); + float c = cos(rad), s = sin(rad); + e[0] = c; e[4] = -s; + e[1] = s; e[5] = c; + } + + void Matrix::setScale(float sx, float sy) + { + setIdentity(); + e[0] = sx; + e[5] = sy; + } + + void Matrix::setShear(float kx, float ky) + { + setIdentity(); + e[1] = ky; + e[4] = kx; + } + + void Matrix::setTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy) + { + memset(e, 0, sizeof(float) * 16); // zero out matrix + float c = cos(angle), s = sin(angle); + // matrix multiplication carried out on paper: + // |1 x| |c -s | |sx | |1 -ox| + // | 1 y| |s c | | sy | | 1 -oy| + // | 1 | | 1 | | 1 | | 1 | + // | 1| | 1| | 1| | 1 | + // move rotate scale origin + e[10] = e[15] = 1.0f; + e[0] = c * sx ; // = a + e[1] = s * sx ; // = b + e[4] = - s * sy; // = c + e[5] = c * sy; // = d + e[12] = x - ox * e[0] - oy * e[4]; + e[13] = y - ox * e[1] - oy * e[5]; + } + + void Matrix::translate(float x, float y) + { + Matrix t; + t.setTranslation(x, y); + this->operator *=(t); + } + + void Matrix::rotate(float rad) + { + Matrix t; + t.setRotation(rad); + this->operator *=(t); + } + + void Matrix::scale(float sx, float sy) + { + Matrix t; + t.setScale(sx, sy); + this->operator *=(t); + } + + void Matrix::shear(float kx, float ky) + { + Matrix t; + t.setShear(kx, ky); + this->operator *=(t); + } + + // | x | + // | y | + // | 0 | + // | 1 | + // | e0 e4 e8 e12 | + // | e1 e5 e9 e13 | + // | e2 e6 e10 e14 | + // | e3 e7 e11 e15 | + + void Matrix::transform(vertex * dst, const vertex * src, int size) const + { + for (int i = 0; i<size; ++i) + { + // Store in temp variables in case src = dst + float x = (e[0] * src[i].x) + (e[4] * src[i].y) + (0) + (e[12]); + float y = (e[1] * src[i].x) + (e[5] * src[i].y) + (0) + (e[13]); + + dst[i].x = x; + dst[i].y = y; + } + } + + } // namespace Math +} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/math/je_matrix.h b/src/libjin/math/je_matrix.h new file mode 100644 index 0000000..bbc831d --- /dev/null +++ b/src/libjin/math/je_matrix.h @@ -0,0 +1,159 @@ +#ifndef __JE_MATRIX_H__ +#define __JE_MATRIX_H__ + +namespace JinEngine +{ + namespace Math + { + + struct vertex + { + unsigned char r, g, b, a; + float x, y; + float s, t; + }; + /// + /// This class is the basis for all transformations in LOVE. Althought not + /// really needed for 2D, it contains 4x4 elements to be compatible with + /// OpenGL without conversions. + /// Ҫתõľ + /// https://blog.csdn.net/candycat1992/article/details/8830894 + /// + class Matrix + { + private: + + /// + /// | e0 e4 e8 e12 | + /// | e1 e5 e9 e13 | + /// | e2 e6 e10 e14 | + /// | e3 e7 e11 e15 | + /// + float e[16]; + + public: + + static const Matrix Identity; + + /// + /// Creates a new identity matrix. + /// + Matrix(); + + /// + /// Destructor. + /// + ~Matrix(); + + void setOrtho(float _left, float _right, float _bottom, float _top, float _near, float _far); + + /// + /// Multiplies this Matrix with another Matrix, changing neither. + /// @param m The Matrix to multiply with this Matrix. + /// @return The combined matrix. + /// + Matrix operator * (const Matrix & m) const; + + /// + /// Multiplies a Matrix into this Matrix. + /// @param m The Matrix to combine into this Matrix. + /// + void operator *= (const Matrix & m); + + /// + /// Gets a pointer to the 16 array elements. + /// @return The array elements. + /// + const float* getElements() const; + + /// + /// Resets this Matrix to the identity matrix. + /// + void setIdentity(); + + /// + /// Resets this Matrix to a translation. + /// @param x Translation along x-axis. + /// @param y Translation along y-axis. + /// + void setTranslation(float x, float y); + + /// + /// Resets this Matrix to a rotation. + /// @param r The angle in radians. + /// + void setRotation(float r); + + /// + /// Resets this Matrix to a scale transformation. + /// @param sx Scale factor along the x-axis. + /// @param sy Scale factor along the y-axis. + /// + void setScale(float sx, float sy); + + /// + /// Resets this Matrix to a shear transformation. + /// @param kx Shear along x-axis. + /// @param ky Shear along y-axis. + /// + void setShear(float kx, float ky); + + /// + /// Creates a transformation with a certain position, orientation, scale + /// and offset. Perfect for Drawables -- what a coincidence! + /// + /// @param x The translation along the x-axis. + /// @param y The translation along the y-axis. + /// @param angle The rotation (rad) around the center with offset (ox,oy). + /// @param sx Scale along x-axis. + /// @param sy Scale along y-axis. + /// @param ox The offset for rotation along the x-axis. + /// @param oy The offset for rotation along the y-axis. + /// @param kx Shear along x-axis + /// @param ky Shear along y-axis + /// + void setTransformation(float x, float y, float angle, float sx, float sy, float ox, float oy); + + /// + /// Multiplies this Matrix with a translation. + /// @param x Translation along x-axis. + /// @param y Translation along y-axis. + /// + void translate(float x, float y); + + /// + /// Multiplies this Matrix with a rotation. + /// @param r Angle in radians. + /// + void rotate(float r); + + /// + /// Multiplies this Matrix with a scale transformation. + /// @param sx Scale factor along the x-axis. + /// @param sy Scale factor along the y-axis. + /// + void scale(float sx, float sy); + + /// + /// Multiplies this Matrix with a shear transformation. + /// @param kx Shear along the x-axis. + /// @param ky Shear along the y-axis. + /// + void shear(float kx, float ky); + + /// + /// Transforms an array of vertices by this Matrix. The sources and + /// destination arrays may be the same. + /// + /// @param dst Storage for the transformed vertices. + /// @param src The source vertices. + /// @param size The number of vertices. + /// + void transform(vertex * dst, const vertex * src, int size) const; + + }; + + } // namespace Math +} // namespace JinEngine + +#endif // __JE_MATRIX_H__ diff --git a/src/libjin/math/je_quad.h b/src/libjin/math/je_quad.h new file mode 100644 index 0000000..8a7bd64 --- /dev/null +++ b/src/libjin/math/je_quad.h @@ -0,0 +1,23 @@ +#ifndef __JE_QUAD_H__ +#define __JE_QUAD_H__ + +namespace JinEngine +{ + namespace Math + { + + /// + /// + /// + struct Quad + { + /// + /// + /// + float x, y, w, h; + }; + + } // namespace Math +} // namespace JinEngine + +#endif // __JE_QUAD_H__ diff --git a/src/libjin/math/je_random.cpp b/src/libjin/math/je_random.cpp new file mode 100644 index 0000000..216fd79 --- /dev/null +++ b/src/libjin/math/je_random.cpp @@ -0,0 +1,52 @@ +#include <math.h> +#include "je_random.h" + +namespace JinEngine +{ + namespace Math + { + + RandomGenerator::RandomGenerator(uint32 seed) + : mSeed(seed) + { + } + + uint32 RandomGenerator::rand() + { + unsigned int next = mSeed; + uint32 result; + + next *= 1103515245; + next += 12345; + result = (unsigned int)(next / 65536) % 2048; + + next *= 1103515245; + next += 12345; + result <<= 10; + result ^= (unsigned int)(next / 65536) % 1024; + + next *= 1103515245; + next += 12345; + result <<= 10; + result ^= (unsigned int)(next / 65536) % 1024; + + mSeed = next; + + return result; + } + + uint32 RandomGenerator::rand(uint32 min, uint32 max) + { + uint32 n = rand(); + return n % (max - min + 1) + min; + } + + float RandomGenerator::randf(float min, float max, int ac) + { + uint32 a = pow(10.f, ac); + uint32 n = rand(min*a, max*a); + return (float)n / a; + } + + } +}
\ No newline at end of file diff --git a/src/libjin/math/je_random.h b/src/libjin/math/je_random.h new file mode 100644 index 0000000..0f53155 --- /dev/null +++ b/src/libjin/math/je_random.h @@ -0,0 +1,33 @@ +#ifndef __JE_RANDOM_H__ +#define __JE_RANDOM_H__ + +#include "../common/je_types.h" + +namespace JinEngine +{ + namespace Math + { + + /// + /// A random number generator. + /// + class RandomGenerator + { + public: + RandomGenerator(uint32 seed); + + uint32 rand(); + + uint32 rand(uint32 min, uint32 max); + + float randf(float min, float max, int ac); + + private: + uint32 mSeed; + + }; + + } // namespace Math +} // namespace JinEngine + +#endif
\ No newline at end of file diff --git a/src/libjin/math/je_transform.cpp b/src/libjin/math/je_transform.cpp new file mode 100644 index 0000000..c0676cb --- /dev/null +++ b/src/libjin/math/je_transform.cpp @@ -0,0 +1,99 @@ +#include "je_transform.h" + +namespace JinEngine +{ + namespace Math + { + + Transform::Transform() + : mScale(1, 1) + , mPosition(0, 0) + , mOrigin(0, 0) + , mRotation(0) + { + } + + void Transform::set(float x, float y, float sx, float sy, float r, float ox, float oy) + { + setPosition(x, y); + setScale(sx, sy); + setRotation(r); + setOrigin(ox, oy); + } + + void Transform::setScale(float sx, float sy) + { + mScale.set(sx, sy); + } + + Vector2<float> Transform::getScale() const + { + return mScale; + } + + void Transform::scale(float sx, float sy) + { + mScale.x *= sx; + mScale.y *= sy; + } + + void Transform::setPosition(const Vector2<float>& p) + { + setPosition(p.x, p.y); + } + + void Transform::setPosition(float x, float y) + { + mPosition.set(x, y); + } + + Vector2<float> Transform::getPosition() const + { + return mPosition; + } + + void Transform::move(float x, float y) + { + mPosition.x += x; + mPosition.y += y; + } + + void Transform::move(const Vector2<float>& v) + { + move(v.x, v.y); + } + + void Transform::setOrigin(float x, float y) + { + mOrigin.set(x, y); + } + + Vector2<float> Transform::getOrigin() const + { + return mOrigin; + } + + void Transform::setRotation(float r) + { + mRotation = r; + } + + float Transform::getRotation() const + { + return mRotation; + } + + void Transform::rotate(float r) + { + mRotation += r; + } + + Matrix Transform::getMatrix() const + { + Matrix m; + m.setTransformation(mPosition.x, mPosition.y, mRotation, mScale.x, mScale.y, mOrigin.x, mOrigin.y); + return m; + } + + } +}
\ No newline at end of file diff --git a/src/libjin/math/je_transform.h b/src/libjin/math/je_transform.h new file mode 100644 index 0000000..cb1f0ee --- /dev/null +++ b/src/libjin/math/je_transform.h @@ -0,0 +1,49 @@ +#ifndef __JE_TRANSFORM_H__ +#define __JE_TRANSFORM_H__ + +#include "je_matrix.h" +#include "je_vector2.hpp" + +namespace JinEngine +{ + namespace Math + { + + class Transform + { + public: + Transform(); + + void set(float x, float y, float sx, float sy, float r, float ox, float oy); + + void setScale(float sx, float sy); + Vector2<float> getScale() const; + void scale(float sx, float sy); + + void setPosition(float x, float y); + void setPosition(const Vector2<float>& p); + Vector2<float> getPosition() const; + void move(float x, float y); + void move(const Vector2<float>& v); + + void setOrigin(float x, float y); + Vector2<float> getOrigin() const; + + void setRotation(float r); + float getRotation() const; + void rotate(float r); + + Matrix getMatrix() const; + + private: + Vector2<float> mScale; + Vector2<float> mPosition; + Vector2<float> mOrigin; + float mRotation; + + }; + + } +} + +#endif
\ No newline at end of file diff --git a/src/libjin/math/je_vector2.hpp b/src/libjin/math/je_vector2.hpp new file mode 100644 index 0000000..b4cab44 --- /dev/null +++ b/src/libjin/math/je_vector2.hpp @@ -0,0 +1,63 @@ +#ifndef __JE_VECTOR_H__ +#define __JE_VECTOR_H__ + +namespace JinEngine +{ + namespace Math + { + + template<typename T> + class Vector2 + { + public: + Vector2() + { + data[0] = data[1] = 0; + } + Vector2(T _x, T _y) + { + data[0] = _x; + data[1] = _y; + } + Vector2(const Vector2<T>& v) + { + data[0] = v.data[0]; + data[1] = v.data[1]; + } + + void operator = (const Vector2<T>& v) + { + data[0] = v.data[0]; + data[1] = v.data[1]; + } + + Vector2<T> operator * (float n) + { + return Vector2<T>(data[0]*n, data[1]*n); + } + + void operator +=(const Vector2<T> v) + { + data[0] += v.data[0]; + data[1] += v.data[1]; + } + + void set(T _x, T _y) + { + data[0] = _x; + data[1] = _y; + } + + T &x = data[0], &y = data[1]; // xy + T &w = data[0], &h = data[1]; // wh + T &colum = data[0], &row = data[1]; // colum row + + private: + T data[2]; + + }; + + } // namespace Math +} // namespace JinEngine + +#endif
\ No newline at end of file diff --git a/src/libjin/math/je_vector3.hpp b/src/libjin/math/je_vector3.hpp new file mode 100644 index 0000000..fdab2d0 --- /dev/null +++ b/src/libjin/math/je_vector3.hpp @@ -0,0 +1,41 @@ +#ifndef __JE_VECTOR3_H__ +#define __JE_VECTOR3_H__ + +namespace JinEngine +{ + namespace Math + { + + template<typename T> + class Vector3 + { + public: + Vector3() + { + data[0] = data[1] = data[2] = 0; + } + Vector3(T _x, T _y, T _z) + { + data[0] = _x; + data[1] = _y; + data[2] = _z; + } + Vector3(const Vector3<T>& v) + { + data[0] = v.data[0]; + data[1] = v.data[1]; + data[2] = v.data[2]; + } + + T &x = data[0], &y = data[1], &z = data[2]; // xyz + T &r = data[0], &g = data[1], &b = data[2]; // rgb + + private: + T data[3]; + + }; + + } // namespace Math +} // namespace JinEngine + +#endif
\ No newline at end of file diff --git a/src/libjin/math/je_vector4.hpp b/src/libjin/math/je_vector4.hpp new file mode 100644 index 0000000..5cd5b35 --- /dev/null +++ b/src/libjin/math/je_vector4.hpp @@ -0,0 +1,45 @@ +#ifndef __JE_VECTOR4_H__ +#define __JE_VECTOR4_H__ + +namespace JinEngine +{ + namespace Math + { + + template<typename T> + class Vector4 + { + public: + Vector4() + { + data[0] = data[1] = data[2] = data[3] = 0; + } + Vector4(T _x, T _y, T _z, T _t) + { + data[0] = _x; + data[1] = _y; + data[2] = _z; + data[3] = _t; + } + Vector4(const Vector4<T>& v) + { + data[0] = v.data[0]; + data[1] = v.data[1]; + data[2] = v.data[2]; + data[3] = v.data[3]; + } + + T &x = data[0], &y = data[1], &z = data[2], &t = data[3]; // xyzt + T &w = data[2], &h = data[3]; // xywh + T &r = data[0], &g = data[1], &b = data[2], &a = data[3]; // rgb + T &left = data[0], &right = data[1], &top = data[2], &bottom = data[3]; // lrtb + + private: + T data[4]; + + }; + + } // namespace Math +} // namespace JinEngine + +#endif
\ No newline at end of file |