#ifndef __RENDERER_HPP_ #define __RENDERER_HPP_ #include #include #include #include #include "mass_springs.hpp" using Edge2Set = std::vector>; using Edge3Set = std::vector>; class Renderer { private: int width; int height; RenderTexture2D render_target; public: Renderer(int width, int height) : width(width), height(height) { render_target = LoadRenderTexture(width, height); } Renderer(const Renderer ©) = delete; Renderer &operator=(const Renderer ©) = delete; Renderer(Renderer &&move) = delete; Renderer &operator=(Renderer &&move) = delete; ~Renderer() { UnloadRenderTexture(render_target); } private: auto Rotate(const Vector3 &a, const float cos_angle, const float sin_angle) -> Vector3; auto Translate(const Vector3 &a, const float distance) -> Vector3; auto Project(const Vector3 &a) -> Vector2; auto Map(const Vector2 &a) -> Vector2; public: auto Transform(Edge2Set &edges, const MassSpringSystem &mass_springs, const float angle, const float distance) -> void; auto Draw(const Edge2Set &edges) -> void; }; #endif