Setup Dynamic Drawing

This commit is contained in:
2025-05-28 16:55:46 -06:00
parent 185a226821
commit 10b2734aa0
3 changed files with 103 additions and 12 deletions

View File

@ -8,15 +8,56 @@ Square::Square(glm::vec3 position, glm::vec3 scale, glm::vec4 color) {
this->position = position; this->position = position;
this->scale = scale; this->scale = scale;
this->color = color; this->color = color;
model_transform = glm::mat4(1.0f); this->rotation = 0;
model_transform = glm::translate(model_transform, position); updateTransform();
model_transform = glm::scale(model_transform, scale);
} }
Square::~Square() { Square::~Square() {
} }
void Square::SetPosition(glm::vec3 position) {
this->position = position;
updateTransform();
}
void Square::SetRotation(float rotation) {
this->rotation = rotation;
updateTransform();
}
void Square::SetScale(glm::vec3 scale) {
this->scale = scale;
updateTransform();
}
void Square::SetColor(glm::vec4 color) {
this->color = color;
}
glm::vec3 Square::GetPosition() {
return this->position;
}
float Square::GetRotation() {
return this->rotation;
}
glm::vec3 Square::GetScale() {
return this->scale;
}
glm::vec4 Square::GetColor() {
return this->color;
}
void Square::updateTransform() {
model_transform = glm::mat4(1.0f);
model_transform = glm::translate(model_transform, position);
model_transform = glm::scale(model_transform, scale);
model_transform = glm::rotate(model_transform, this->rotation, glm::vec3{0.0f, 0.0f, 1.0f});
}
void Square::Draw(SpriteRenderer* renderer) { void Square::Draw(SpriteRenderer* renderer) {
//glUniformMatrix4fv(UNIFORM_MODEL_MAT, 1, GL_FALSE, glm::value_ptr(model_transform)); //glUniformMatrix4fv(UNIFORM_MODEL_MAT, 1, GL_FALSE, glm::value_ptr(model_transform));
//glBindVertexArray(VAO); //glBindVertexArray(VAO);

View File

@ -6,14 +6,27 @@ class Square {
private: private:
unsigned int VAO, VBO, EBO; unsigned int VAO, VBO, EBO;
glm::mat4 model_transform;
glm::vec3 position; glm::vec3 position;
glm::vec3 scale; glm::vec3 scale;
float rotation;
glm::vec4 color; glm::vec4 color;
glm::mat4 model_transform;
public: public:
Square(glm::vec3 position, glm::vec3 scale, glm::vec4 color); Square(glm::vec3 position, glm::vec3 scale, glm::vec4 color);
~Square(); ~Square();
void Draw(SpriteRenderer*); void Draw(SpriteRenderer*);
void SetPosition(glm::vec3 position);
void SetRotation(float rotation);
void SetScale(glm::vec3 scale);
void SetColor(glm::vec4 color);
glm::vec3 GetPosition();
float GetRotation();
glm::vec3 GetScale();
glm::vec4 GetColor();
private:
void updateTransform();
}; };

View File

@ -23,6 +23,10 @@ bool running = true;
Window* window; Window* window;
unsigned int uniformBuffer; unsigned int uniformBuffer;
double lastTime;
Square *square1, *square2, *square3, *square4;
struct matricies { struct matricies {
glm::mat4 projection; glm::mat4 projection;
glm::mat4 view; glm::mat4 view;
@ -100,27 +104,55 @@ void render() {
INFO("Render thread starting"); INFO("Render thread starting");
renderInit(); renderInit();
SpriteRenderer* renderer = new SpriteRenderer(); SpriteRenderer* renderer = new SpriteRenderer();
Square square1(glm::vec3(100, 100, 0), glm::vec3(100, 100, 1), glm::vec4(1.0f, 0.0f, 0.0f, 1.0f));
Square square2(glm::vec3(600, 100, 0), glm::vec3(100, 100, 1), glm::vec4(0.0f, 1.0f, 0.0f, 1.0f));
Square square3(glm::vec3(100, 400, 0), glm::vec3(100, 100, 1), glm::vec4(0.0f, 0.0f, 1.0f, 1.0f));
Square square4(glm::vec3(600, 400, 0), glm::vec3(100, 100, 1), glm::vec4(0.7f, 0.7f, 0.3f, 1.0f));
while (running) { while (running) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
window->beginRender(); window->beginRender();
square1.Draw(renderer); square1->Draw(renderer);
square2.Draw(renderer); square2->Draw(renderer);
square3.Draw(renderer); square3->Draw(renderer);
square4.Draw(renderer); square4->Draw(renderer);
renderer->flush(); renderer->flush();
window->endRender(); window->endRender();
} }
delete renderer; delete renderer;
} }
float sq1_vel = -.5f;
float sq2_scale_vel = 0.995f;
float sq3_color_vel = -0.01f;
float sq4_rot_vel = 0.01f;
void update() { void update() {
glfwMakeContextCurrent(NULL); glfwMakeContextCurrent(NULL);
INFO("Update Thread Starting"); INFO("Update Thread Starting");
lastTime = glfwGetTime();
while (!window->isClosing()) { while (!window->isClosing()) {
double currentTime = glfwGetTime();
if(currentTime - lastTime >= (1/60.0)) { //Update 60 times per second
lastTime = currentTime;
glm::vec3 pos = square1->GetPosition();
pos.y += sq1_vel;
square1->SetPosition(pos);
if(pos.y > 150 || pos.y < 50) {
sq1_vel = -sq1_vel;
}
glm::vec3 scale = square2->GetScale();
scale.x *= sq2_scale_vel;
scale.y *= sq2_scale_vel;
square2->SetScale(scale);
if(scale.x < 50 || scale.x > 200) {
sq2_scale_vel = 1.0f/sq2_scale_vel;
}
glm::vec4 col = square3->GetColor();
col.b += sq3_color_vel;
square3->SetColor(col);
if(col.b <= 0.1 || col.b >= 1.0) {
sq3_color_vel = -sq3_color_vel;
}
float rot = square4->GetRotation();
rot += sq4_rot_vel;
square4->SetRotation(rot);
}
glfwPollEvents(); glfwPollEvents();
} }
running = false; running = false;
@ -129,6 +161,11 @@ void update() {
int main() { int main() {
init(); init();
square1 = new Square(glm::vec3(100, 100, 0), glm::vec3(100, 100, 1), glm::vec4(1.0f, 0.0f, 0.0f, 1.0f));
square2 = new Square(glm::vec3(600, 100, 0), glm::vec3(100, 100, 1), glm::vec4(0.0f, 1.0f, 0.0f, 1.0f));
square3 = new Square(glm::vec3(100, 400, 0), glm::vec3(100, 100, 1), glm::vec4(0.0f, 0.0f, 1.0f, 1.0f));
square4 = new Square(glm::vec3(600, 400, 0), glm::vec3(100, 100, 1), glm::vec4(0.7f, 0.7f, 0.3f, 1.0f));
std::thread renderThread(render); std::thread renderThread(render);
update(); update();
renderThread.join(); renderThread.join();