From fda88a906bf9b275915bd7cd5f215e8debbd3c19 Mon Sep 17 00:00:00 2001 From: Nathan Date: Mon, 16 Feb 2026 22:41:20 -0600 Subject: [PATCH] add draw types --- src/include/utils/Objects/Object.h | 25 +++++++++++++++- src/include/utils/Renderer/Renderer.h | 9 +++++- .../RendererOpenGL/RendererOpenGL.h | 15 ++++++++-- .../Archimedes-Modules/Sandbox/Sandbox.cpp | 30 ++++++++++++------- 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/src/include/utils/Objects/Object.h b/src/include/utils/Objects/Object.h index 5a37206..73f6635 100644 --- a/src/include/utils/Objects/Object.h +++ b/src/include/utils/Objects/Object.h @@ -5,17 +5,40 @@ #include "extratools.h" +#include "utils/Renderer/RenderTarget.h" + namespace Archimedes { class Object { public: - Object() {}; + Object(RenderTarget rt) : mesh(rt) {}; + + Object(VertexBuffer vb, IndexArray ia, VertexLayout vl, Shader s, glm::mat4 t) + : mesh(vb, ia, vl, s), worldTransform(t) {} + + Object() {} + ~Object() {}; + + ///scales an object absolutely + void scaleTo() {} + void scaleRel() {} + + void moveTo() {} + void moveRel() {} + + void rotateTo() {} + void rotateRel() {} private: + glm::vec3 position = glm::vec3(0); + glm::vec3 rotation = glm::vec3(0); + glm::mat4 worldTransform = glm::mat4(1.0f); + + RenderTarget mesh; }; } diff --git a/src/include/utils/Renderer/Renderer.h b/src/include/utils/Renderer/Renderer.h index 3aeb16c..d65b4f1 100644 --- a/src/include/utils/Renderer/Renderer.h +++ b/src/include/utils/Renderer/Renderer.h @@ -12,6 +12,13 @@ namespace Archimedes { class Renderer { public: + + enum class RenderMode { + Triangles, + Lines, + Points + }; + int w, h; glm::vec4 clearColor = { 0.0f, 0.0f, 0.0f, 1.0f }; @@ -37,7 +44,7 @@ namespace Archimedes { virtual void useRenderTarget(RenderTarget& rt) = 0; - virtual void draw(const RenderTarget&) = 0; + virtual void draw(const RenderTarget& rt, RenderMode mode = RenderMode::Triangles) = 0; virtual Renderer* getRendererImpl() = 0; diff --git a/src/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h b/src/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h index f21c0e9..f79bd86 100644 --- a/src/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h +++ b/src/include/utils/Renderer/RendererImpl/RendererOpenGL/RendererOpenGL.h @@ -173,6 +173,7 @@ namespace Archimedes { return rt; }; + void useRenderTarget(RenderTarget& rt) override { glGenVertexArrays(1, &rt.vertexArray.id); @@ -202,7 +203,7 @@ namespace Archimedes { }; - void draw(const RenderTarget& rt) override { + void draw(const RenderTarget& rt, RenderMode mode) override { glUseProgram(rt.shader.id); @@ -218,7 +219,17 @@ namespace Archimedes { glBindVertexArray(rt.vertexArray.id); - glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr); + switch(mode) { + case RenderMode::Triangles: + glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr); + case RenderMode::Lines: + glDrawElements(GL_LINES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr); + case RenderMode::Points: + glDrawElements(GL_POINTS, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr); + default: + break; + } + glBindVertexArray(0); } diff --git a/src/modules/Archimedes-Modules/Sandbox/Sandbox.cpp b/src/modules/Archimedes-Modules/Sandbox/Sandbox.cpp index afe7207..0259c3d 100644 --- a/src/modules/Archimedes-Modules/Sandbox/Sandbox.cpp +++ b/src/modules/Archimedes-Modules/Sandbox/Sandbox.cpp @@ -86,14 +86,22 @@ void Sandbox::onLoad() { void Sandbox::run() { - static float scale = 100.0f; + static float scale = 1.0f; static glm::vec3 pos(0), rot(0); - static glm::vec3 camPos(0.0f, 0.0f, 3.0f), camRot(0.0f, 0.0f, 0.0f); + static glm::vec3 camPos(0.0f, 0.0f, 3.0f), camRot(0.0f, glm::pi(), 0.0f); static glm::mat4 orthoCamera, perspCamera, cameraTransform; + std::vector otf = { + glm::vec3(0.5f, 0.5f, 0.0f), + glm::vec3(-0.5f, -0.5f, 0.0f), + + glm::vec3(-0.5f, 0.5f, 0.0f), + glm::vec3(0.5f, -0.5f, 0.0f) + }; + /* cameraTransform = glm::mat4(1.0f); cameraTransform = glm::translate(cameraTransform, camPos); @@ -104,7 +112,7 @@ void Sandbox::run() { cameraTransform = glm::lookAt( camPos, - glm::normalize(glm::vec3(glm::cos(camRot.y) * glm::cos(camRot.x), glm::sin(camRot.x), glm::sin(camRot.y) * glm::cos(camRot.x))), + camPos + glm::normalize(glm::vec3(glm::sin(camRot.y) * glm::cos(camRot.x), glm::sin(camRot.x), glm::cos(camRot.y) * glm::cos(camRot.x))), glm::vec3(0.0f, 1.0f, 0.0f) ); /* @@ -152,7 +160,7 @@ void Sandbox::run() { //window->getRenderer()->draw(grid); window->getRenderer()->draw(cube); - + { ImGuiIO& io = ImGui::GetIO(); @@ -169,9 +177,9 @@ void Sandbox::run() { ImGui::Text("Properties"); - ImGui::SliderFloat("pitch", &rot.x, -3.14159265359f, 3.14159265359f); - ImGui::SliderFloat("yaw", &rot.y, -3.14159265359f, 3.14159265359f); - ImGui::SliderFloat("roll", &rot.z, -3.14159265359f, 3.14159265359f); + ImGui::SliderFloat("pitch", &rot.x, -glm::pi(), glm::pi()); + ImGui::SliderFloat("yaw", &rot.y, -glm::pi(), glm::pi()); + ImGui::SliderFloat("roll", &rot.z, -glm::pi(), glm::pi()); ImGui::SliderFloat("scale", &scale, 0.1f, 10.0f); @@ -180,10 +188,10 @@ void Sandbox::run() { ImGui::SliderFloat("z", &pos.z, -10.0f, 10.0f); ImGui::Text("Camera Properties"); - - ImGui::SliderFloat("c_pitch", &camRot.x, -3.14159265359f, 3.14159265359f); - ImGui::SliderFloat("c_yaw", &camRot.y, -3.14159265359f, 3.14159265359f); - ImGui::SliderFloat("c_roll", &camRot.z, -3.14159265359f, 3.14159265359f); + + ImGui::SliderFloat("c_pitch", &camRot.x, -glm::pi(), glm::pi()); + ImGui::SliderFloat("c_yaw", &camRot.y, 0, 2 * glm::pi()); + ImGui::SliderFloat("c_roll", &camRot.z, -glm::pi(), glm::pi()); ImGui::SliderFloat("c_x", &camPos.x, -10.0f, 10.0f); ImGui::SliderFloat("c_y", &camPos.y, -10.0f, 10.0f);