From 0631fb666d2a28a6eb9b8d1578675699b41a5de6 Mon Sep 17 00:00:00 2001 From: Mel Date: Tue, 4 Oct 2022 01:18:19 +0200 Subject: Cube Rendering --- src/Math/Matrix.hpp | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) (limited to 'src/Math/Matrix.hpp') diff --git a/src/Math/Matrix.hpp b/src/Math/Matrix.hpp index adc34a9..9a6b7e6 100644 --- a/src/Math/Matrix.hpp +++ b/src/Math/Matrix.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include template @@ -9,8 +9,24 @@ struct Matrix { public: Matrix() : elements{} {}; + Matrix(T scalar) { + std::fill(elements, elements + R * C, scalar); + }; + template - explicit Matrix(Args... args): elements{ args... } {}; + Matrix(Args... args): elements{ args... } {}; + + Matrix(T values[R * C]) { + std::copy(values, values + R * C, elements); + }; + + static Matrix identity() { + Matrix result{}; + for (int i = 0; i < R; i++) { + result(i, i) = 1; + } + return result; + } Vector row(size_t index) { return { &elements[index * C] }; @@ -24,6 +40,22 @@ public: return result; } + Matrix operator+(Matrix other) { + Matrix result{}; + for (int i = 0; i < R * C; i++) { + result.elements[i] = elements[i] + other.elements[i]; + } + return result; + } + + Matrix operator*(float scalar) { + Matrix result{}; + for (int i = 0; i < R * C; i++) { + result.elements[i] = elements[i] * scalar; + } + return result; + } + template Matrix operator*(Matrix other) { Matrix result{}; @@ -34,16 +66,18 @@ public: auto dot = r * c; - std::cout << x << ", " << y << ": " - << "(" << r.string() << ", " << c.string() << ")" - << dot << std::endl; - result(x, y) = dot; } } return result; } + Vector operator*(Vector vector) { + Matrix matrix(vector.elements); + matrix = this->operator*(matrix); + return { matrix.elements }; + } + auto& operator()(size_t x, size_t y) { return elements[y * C + x]; } -- cgit 1.4.1