Setup Dynamic Drawing
This commit is contained in:
@ -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);
|
||||||
|
@ -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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
Reference in New Issue
Block a user