Image rotation is working

Gui_Panel_Refactor
Joeyrp 4 years ago
parent 08adeb6b9d
commit 90afa2d908

@ -21,7 +21,8 @@ Core:
✔ Add a DrawPolygon method that takes vertices and draws arbirary shapes @done (10/29/2021, 6:24:14 PM) ✔ Add a DrawPolygon method that takes vertices and draws arbirary shapes @done (10/29/2021, 6:24:14 PM)
☐ Allow DrawPolygon to add a texture to the polygon @low ☐ Allow DrawPolygon to add a texture to the polygon @low
✔ Refactor the drawing code to allow for rotation with cleaner code @high @done (10/29/2021, 8:36:24 PM) ✔ Refactor the drawing code to allow for rotation with cleaner code @high @done (10/29/2021, 8:36:24 PM)
☐ Test rotation of images ✔ Test rotation of images @done (11/1/2021, 2:11:13 PM)
☐ Fix line rotation @low
GUI: GUI:
@ -42,6 +43,9 @@ Core:
☐ Come up with a way to wrap Box2D into an API ☐ Come up with a way to wrap Box2D into an API
Audio: Audio:
☐ Research the usage of OpenAL
☐ Add OpenAL to the project
☐ Design Audio API
Scripting: Scripting:
Script Managment class: Script Managment class:

@ -48,13 +48,13 @@ namespace lunarium
virtual Color GetClearColor() const = 0; virtual Color GetClearColor() const = 0;
// Draw Methods // Draw Methods
virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color) = 0; virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color, glm::vec2 position, float angle = 0.0f) = 0;
virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth) = 0; virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth, float angle = 0.0f) = 0;
virtual void DrawEllipse(glm::vec2 center, glm::vec2 radii, Color color, float thickness, int resolution) = 0; virtual void DrawEllipse(glm::vec2 center, glm::vec2 radii, Color color, float thickness, int resolution) = 0;
virtual void DrawFilledEllipse(glm::vec2 center, glm::vec2 radii, Color color, int resolution) = 0; virtual void DrawFilledEllipse(glm::vec2 center, glm::vec2 radii, Color color, int resolution) = 0;
virtual void DrawBox(Rectangle dimensions, Color color, float thickness, float angle = 0.0f) = 0; virtual void DrawBox(Rectangle dimensions, Color color, float thickness, float angle = 0.0f) = 0;
virtual void DrawFilledBox(Rectangle box, Color color, float angle = 0.0f) = 0; virtual void DrawFilledBox(Rectangle box, Color color, float angle = 0.0f) = 0;
virtual void DrawImage(Image& image, glm::vec2 topLeft, Color color, float angle = 0.0f) = 0; virtual void DrawImage(Image& image, glm::vec2 position, Color color, float angle = 0.0f) = 0;
virtual void DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle = 0.0f) = 0; virtual void DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle = 0.0f) = 0;
virtual void DrawString(const char* string, Rectangle boundingArea, Color color, float scale = 1.0f, int font = 0) = 0; virtual void DrawString(const char* string, Rectangle boundingArea, Color color, float scale = 1.0f, int font = 0) = 0;

@ -190,11 +190,12 @@ namespace lunarium
} }
// Draw Methods // Draw Methods
void OglGraphics::DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth) void OglGraphics::DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth, float angle)
{ {
mShapeShader.MakeActive(); mShapeShader.MakeActive();
mShapeShader.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection)); mShapeShader.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection));
glm::mat4 model = glm::mat4(1.0f); glm::mat4 model = glm::mat4(1.0f);
model = glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f));
mShapeShader.SetUniformMatrix("model", 1, glm::value_ptr(model)); mShapeShader.SetUniformMatrix("model", 1, glm::value_ptr(model));
mShapeShader.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha }); mShapeShader.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha });
glBindVertexArray(mRectVAO); glBindVertexArray(mRectVAO);
@ -273,11 +274,13 @@ namespace lunarium
glBindVertexArray(0); glBindVertexArray(0);
} }
void OglGraphics::DrawFilledPolygon(float* pVerts, int numVerts, Color color) void OglGraphics::DrawFilledPolygon(float* pVerts, int numVerts, Color color, glm::vec2 position, float angle)
{ {
mShapeShader.MakeActive(); mShapeShader.MakeActive();
mShapeShader.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection)); mShapeShader.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection));
glm::mat4 model = glm::mat4(1.0f); glm::mat4 model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(position.x, position.y, 0.0f));
model = glm::rotate(model, angle, glm::vec3(0.0f, 0.0f, 1.0f));
mShapeShader.SetUniformMatrix("model", 1, glm::value_ptr(model)); mShapeShader.SetUniformMatrix("model", 1, glm::value_ptr(model));
mShapeShader.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha }); mShapeShader.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha });
glBindVertexArray(mRectVAO); glBindVertexArray(mRectVAO);
@ -348,7 +351,7 @@ namespace lunarium
void OglGraphics::DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle) void OglGraphics::DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle)
{ {
glm::mat4 id = glm::mat4(1.0f); glm::mat4 id = glm::mat4(1.0f);
glm::vec3 pos = glm::vec3(destination.left(), destination.top(), 0.0f); glm::vec3 pos = glm::vec3(destination.X, destination.Y, 0.0f);
glm::mat4 trans = glm::translate(id, pos); glm::mat4 trans = glm::translate(id, pos);
trans = glm::rotate(trans, angle, glm::vec3(0.0f, 0.0f, 1.0f)); trans = glm::rotate(trans, angle, glm::vec3(0.0f, 0.0f, 1.0f));
trans = glm::scale(trans, glm::vec3(destination.HalfWidth * 2, destination.HalfHeight * 2, 1.0f)); trans = glm::scale(trans, glm::vec3(destination.HalfWidth * 2, destination.HalfHeight * 2, 1.0f));
@ -476,24 +479,24 @@ namespace lunarium
GLuint VBO; GLuint VBO;
GLfloat vertices[] = { GLfloat vertices[] = {
// Pos // Tex // Pos // Tex
0.0f, 1.0f, 0.0f, 0.0f, -0.5f, 0.5f, 0.0f, 0.0f,
1.0f, 0.0f, 1.0f, 1.0f, 0.5f, -0.5f, 1.0f, 1.0f,
0.0f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 0.0f, -0.5f, 0.5f, 0.0f, 0.0f,
1.0f, 1.0f, 1.0f, 0.0f, 0.5f, 0.5f, 1.0f, 0.0f,
1.0f, 0.0f, 1.0f, 1.0f 0.5f, -0.5f, 1.0f, 1.0f
}; };
// GLfloat vertices[] = { // GLfloat vertices[] = {
// // Pos // Tex // // Pos // Tex
// 0.0f, 1.0f, 0.0f, 1.0f, // 0.0f, 1.0f, 0.0f, 0.0f,
// 1.0f, 0.0f, 1.0f, 0.0f, // 1.0f, 0.0f, 1.0f, 1.0f,
// 0.0f, 0.0f, 0.0f, 0.0f, // 0.0f, 0.0f, 0.0f, 1.0f,
// 0.0f, 1.0f, 0.0f, 1.0f, // 0.0f, 1.0f, 0.0f, 0.0f,
// 1.0f, 1.0f, 1.0f, 1.0f, // 1.0f, 1.0f, 1.0f, 0.0f,
// 1.0f, 0.0f, 1.0f, 0.0f // 1.0f, 0.0f, 1.0f, 1.0f
// }; // };
glGenVertexArrays(1, &mImageVAO); glGenVertexArrays(1, &mImageVAO);

@ -43,8 +43,8 @@ namespace lunarium
virtual Color GetClearColor() const; virtual Color GetClearColor() const;
// Draw Methods // Draw Methods
virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color); virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color, glm::vec2 position, float angle = 0.0f);
virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth); virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth, float angle = 0.0f);
virtual void DrawEllipse(glm::vec2 center, glm::vec2 radii, Color color, float thickness, int resolution); virtual void DrawEllipse(glm::vec2 center, glm::vec2 radii, Color color, float thickness, int resolution);
virtual void DrawFilledEllipse(glm::vec2 center, glm::vec2 radii, Color color, int resolution); virtual void DrawFilledEllipse(glm::vec2 center, glm::vec2 radii, Color color, int resolution);
virtual void DrawBox(Rectangle box, Color color, float thickness, float angle = 0.0f); virtual void DrawBox(Rectangle box, Color color, float thickness, float angle = 0.0f);

@ -118,6 +118,8 @@ namespace lunarium
mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::RETURN, { KeyCode::RETURN, "return", "return", (char)(10), (char)(10) })); mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::RETURN, { KeyCode::RETURN, "return", "return", (char)(10), (char)(10) }));
mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::ESCAPE, { KeyCode::ESCAPE, "escape", "escape", (char)(27), (char)(27) })); mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::ESCAPE, { KeyCode::ESCAPE, "escape", "escape", (char)(27), (char)(27) }));
mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::SPACE, { KeyCode::SPACE, "space", "space", (char)(32), (char)(32) })); mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::SPACE, { KeyCode::SPACE, "space", "space", (char)(32), (char)(32) }));
mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::PAGE_UP, { KeyCode::PAGE_UP, "page up", "page up", (char)(0), (char)(0) }));
mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::PAGE_DOWN, { KeyCode::PAGE_DOWN, "page down", "page down", (char)(0), (char)(0) }));
// Arrow Keys // Arrow Keys
mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::LEFT, { KeyCode::LEFT, "Left Arrow", "Left Arrow", (char)(0), (char)(0) })); mKeyboard.insert(std::pair<KeyCode, Key>(KeyCode::LEFT, { KeyCode::LEFT, "Left Arrow", "Left Arrow", (char)(0), (char)(0) }));

@ -27,7 +27,7 @@ namespace lunarium
void PhysicsScene::OnLoad() void PhysicsScene::OnLoad()
{ {
Logger::Log(mLogCat, LogLevel::INFO, "Running Simple Render Test Scene"); Logger::Log(mLogCat, LogLevel::INFO, "Running Physics Test Scene");
// Comments from the docs: https://box2d.org/documentation/md__d_1__git_hub_box2d_docs_hello.html // Comments from the docs: https://box2d.org/documentation/md__d_1__git_hub_box2d_docs_hello.html

@ -29,6 +29,8 @@ namespace lunarium
// Currently the full default window size // Currently the full default window size
mImageSize.Width = 1280; mImageSize.Width = 1280;
mImageSize.Height = 720; mImageSize.Height = 720;
angle = 0.0f;
} }
void SimpleRenderScene::OnTick(double delta) void SimpleRenderScene::OnTick(double delta)
@ -64,6 +66,16 @@ namespace lunarium
mImageSize.Height += 10; mImageSize.Height += 10;
} }
if (Core::Input().IsKeyDown(KeyCode::PAGE_UP))
{
angle += 0.1f;
}
if (Core::Input().IsKeyDown(KeyCode::PAGE_DOWN))
{
angle -= 0.1f;
}
mImageSize.Width = Math::ClampI(mImageSize.Width, 320, 1280); mImageSize.Width = Math::ClampI(mImageSize.Width, 320, 1280);
mImageSize.Height = Math::ClampI(mImageSize.Height, 180, 720); mImageSize.Height = Math::ClampI(mImageSize.Height, 180, 720);
@ -87,8 +99,8 @@ namespace lunarium
void SimpleRenderScene::OnRender(IGraphics* g) void SimpleRenderScene::OnRender(IGraphics* g)
{ {
g->DrawImage(*mpRenderedImage, Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mpRenderedImage->GetWidth(), (float)mpRenderedImage->GetHeight()), g->DrawImage(*mpRenderedImage, Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mpRenderedImage->GetWidth(), (float)mpRenderedImage->GetHeight()),
Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(1.0f, 1.0f, 1.0f, 1.0f)); Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(1.0f, 1.0f, 1.0f, 1.0f), angle);
g->DrawBox(Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(0.0f, 0.0f, 0.0f, 1.0f), 1.0f); g->DrawBox(Rectangle::MakeFromTopLeft(0.0f, 0.0f, (float)mImageSize.Width, (float)mImageSize.Height), Color(0.0f, 0.0f, 0.0f, 1.0f), 1.0f, angle);
} }
} }

@ -28,6 +28,7 @@ namespace lunarium
int mTextBoxWidth; int mTextBoxWidth;
Sizei mImageSize; Sizei mImageSize;
Image* mpRenderedImage; Image* mpRenderedImage;
float angle;
}; };
} }

@ -10,6 +10,7 @@
#include "scenes/simpleRenderScene.h" #include "scenes/simpleRenderScene.h"
#include "scenes/physicsScene.h" #include "scenes/physicsScene.h"
#include <core/Core.h>
#include <utils/logger.h> #include <utils/logger.h>
#include <graphics/igraphics.h> #include <graphics/igraphics.h>
#include <LunariumConfig.h> #include <LunariumConfig.h>
@ -34,8 +35,8 @@ namespace lunarium
Logger::Log(mLogCat, LogLevel::INFO, "BUILDING WITH THE EDITOR!"); Logger::Log(mLogCat, LogLevel::INFO, "BUILDING WITH THE EDITOR!");
#endif #endif
// mpScene = new SimpleRenderScene(mLogCat); mpScene = new SimpleRenderScene(mLogCat);
mpScene = new PhysicsScene(mLogCat); // mpScene = new PhysicsScene(mLogCat);
mpScene->OnLoad(); mpScene->OnLoad();
@ -50,6 +51,26 @@ namespace lunarium
void Tester::OnTick(double delta) void Tester::OnTick(double delta)
{ {
if (Core::Input().IsKeyDown(KeyCode::NUM_1))
{
if (!dynamic_cast<SimpleRenderScene*>(mpScene))
{
delete mpScene;
mpScene = new SimpleRenderScene(mLogCat);
mpScene->OnLoad();
}
}
if (Core::Input().IsKeyDown(KeyCode::NUM_2))
{
if (!dynamic_cast<PhysicsScene*>(mpScene))
{
delete mpScene;
mpScene = new PhysicsScene(mLogCat);
mpScene->OnLoad();
}
}
mpScene->OnTick(delta); mpScene->OnTick(delta);
} }

@ -100,6 +100,9 @@ namespace lunarium
ESCAPE = GLFW_KEY_ESCAPE, ESCAPE = GLFW_KEY_ESCAPE,
PAGE_UP = GLFW_KEY_PAGE_UP,
PAGE_DOWN = GLFW_KEY_PAGE_DOWN,
// Punctuation // Punctuation
SEMICOLON = GLFW_KEY_SEMICOLON, // ';:' for US SEMICOLON = GLFW_KEY_SEMICOLON, // ';:' for US
EQUALS = GLFW_KEY_EQUAL, // '+' any country EQUALS = GLFW_KEY_EQUAL, // '+' any country
@ -199,6 +202,8 @@ namespace lunarium
KeyCode::BACKSPACE, KeyCode::BACKSPACE,
KeyCode::TAB, KeyCode::TAB,
KeyCode::ESCAPE, KeyCode::ESCAPE,
KeyCode::PAGE_UP,
KeyCode::PAGE_DOWN,
KeyCode::SEMICOLON, KeyCode::SEMICOLON,
KeyCode::EQUALS, KeyCode::EQUALS,
KeyCode::COMMA, KeyCode::COMMA,

Loading…
Cancel
Save