From 09f850728a728b1fd211ec30153dc51bcc83725e Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Sun, 18 Apr 2021 16:25:25 +0200 Subject: [PATCH] LibGfx: Add some missing operators to Vector3 Vector4 and Matrix4x4 --- Userland/Libraries/LibGfx/Matrix4x4.h | 19 +++++++++++++++++++ Userland/Libraries/LibGfx/Vector3.h | 16 ++++++++++++++++ Userland/Libraries/LibGfx/Vector4.h | 18 ++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/Userland/Libraries/LibGfx/Matrix4x4.h b/Userland/Libraries/LibGfx/Matrix4x4.h index 16f927d3ce..c1ebdfaaa5 100644 --- a/Userland/Libraries/LibGfx/Matrix4x4.h +++ b/Userland/Libraries/LibGfx/Matrix4x4.h @@ -8,6 +8,7 @@ #include #include +#include #include namespace Gfx { @@ -46,6 +47,15 @@ public: return product; } + Vector4 operator*(const Vector4& v) const + { + return Vector4( + v.x() * m_elements[0][0] + v.y() * m_elements[1][0] + v.z() * m_elements[2][0] + v.w() * m_elements[3][0], + v.x() * m_elements[0][1] + v.y() * m_elements[1][1] + v.z() * m_elements[2][1] + v.w() * m_elements[3][1], + v.x() * m_elements[0][2] + v.y() * m_elements[1][2] + v.z() * m_elements[2][2] + v.w() * m_elements[3][2], + v.x() * m_elements[0][3] + v.y() * m_elements[1][3] + v.z() * m_elements[2][3] + v.w() * m_elements[3][3]); + } + Vector3 transform_point(const Vector3& p) const { return Vector3( @@ -54,6 +64,15 @@ public: p.x() * m_elements[0][2] + p.y() * m_elements[1][2] + p.z() * m_elements[2][2] + m_elements[3][2]); } + static Matrix4x4 identity() + { + return Matrix4x4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1); + } + static Matrix4x4 translate(const Vector3& p) { return Matrix4x4( diff --git a/Userland/Libraries/LibGfx/Vector3.h b/Userland/Libraries/LibGfx/Vector3.h index 49c8c05afc..2a3a143113 100644 --- a/Userland/Libraries/LibGfx/Vector3.h +++ b/Userland/Libraries/LibGfx/Vector3.h @@ -28,6 +28,22 @@ public: void set_y(T value) { m_y = value; } void set_z(T value) { m_z = value; } + Vector3& operator+=(const Vector3& other) + { + m_x += other.m_x; + m_y += other.m_y; + m_z += other.m_z; + return *this; + } + + Vector3& operator-=(const Vector3& other) + { + m_x -= other.m_x; + m_y -= other.m_y; + m_z -= other.m_z; + return *this; + } + Vector3 operator+(const Vector3& other) const { return Vector3(m_x + other.m_x, m_y + other.m_y, m_z + other.m_z); diff --git a/Userland/Libraries/LibGfx/Vector4.h b/Userland/Libraries/LibGfx/Vector4.h index c48d349565..3f735c3669 100644 --- a/Userland/Libraries/LibGfx/Vector4.h +++ b/Userland/Libraries/LibGfx/Vector4.h @@ -31,6 +31,24 @@ public: void set_z(T value) { m_z = value; } void set_w(T value) { m_w = value; } + Vector4& operator+=(const Vector4& other) + { + m_x += other.m_x; + m_y += other.m_y; + m_z += other.m_z; + m_w += other.m_w; + return *this; + } + + Vector4& operator-=(const Vector4& other) + { + m_x -= other.m_x; + m_y -= other.m_y; + m_z -= other.m_z; + m_w -= other.m_w; + return *this; + } + Vector4 operator+(const Vector4& other) const { return Vector4(m_x + other.m_x, m_y + other.m_y, m_z + other.m_z, m_w + other.m_w);