From d57a1514ee4396c3f376cf786a45f96c852041d1 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Mon, 12 Dec 2022 21:29:45 +0800 Subject: [PATCH] Implement renderable class --- FinalProject/renderable.cpp | 44 +++++++++++++++++++++++++++++++++++++ FinalProject/renderable.h | 14 +++++++----- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/FinalProject/renderable.cpp b/FinalProject/renderable.cpp index 6f70f09..4497556 100644 --- a/FinalProject/renderable.cpp +++ b/FinalProject/renderable.cpp @@ -1 +1,45 @@ #pragma once + +#include + +#include "renderable.h" + +Renderable::Renderable(Model* model) : _model(model) {} + +Renderable::Renderable(Model* model, glm::vec3 position) : _model(model), _position(position) {} + +void Renderable::move(glm::vec3 deltaVec) { + _position += deltaVec; +} + +void Renderable::setPosition(glm::vec3 position) { + _position = position; +} + +void Renderable::rotate(glm::vec3 axis, float deltaAngle) { + _rotation = glm::rotate(_rotation, deltaAngle, axis); +} + +void Renderable::setRotation(glm::vec3 axis, float angle) { + _rotation = glm::rotate(glm::mat4(1.0f), angle, axis); +} + +void Renderable::scale(float deltaScale) { + _scale += deltaScale; +} + +void Renderable::setScale(float scale) { + _scale = glm::vec3(scale); +} + +inline glm::mat4 Renderable::modelMatrix() const { + glm::mat4 model = glm::mat4(1.0f); + model = glm::translate(model, _position); + model = model * _rotation; + model = glm::scale(model, _scale); + return model; +} + +void Renderable::render(ShaderProgram shader) { + _model->render(shader); +} diff --git a/FinalProject/renderable.h b/FinalProject/renderable.h index 49f26b7..d4e811d 100644 --- a/FinalProject/renderable.h +++ b/FinalProject/renderable.h @@ -8,9 +8,9 @@ class Renderable { private: Model* _model; - glm::vec3 _position; - glm::mat4 _rotation; - glm::vec3 _scale; + glm::vec3 _position = glm::vec3(0.0f); + glm::mat4 _rotation = glm::mat4(1.0f); + glm::vec3 _scale = glm::vec3(1.0f); public: Renderable(Model* model); @@ -18,12 +18,14 @@ public: public: void move(glm::vec3 deltaVec); - void setPosition(glm::vec3 deltaVec); - void rotate(glm::vec3 axis, float angleRad); - void setRotation(glm::vec3 axis, float angleRad); + void setPosition(glm::vec3 position); + void rotate(glm::vec3 axis, float deltaAngle); + void setRotation(glm::vec3 axis, float angle); void scale(float deltaScale); void setScale(float scale); + inline glm::mat4 modelMatrix() const; + public: void render(ShaderProgram shader); };