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)
☐ 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)
☐ Test rotation of images
✔ Test rotation of images @done (11/1/2021, 2:11:13 PM)
☐ Fix line rotation @low
GUI:
@ -42,6 +43,9 @@ Core:
☐ Come up with a way to wrap Box2D into an API
Audio:
☐ Research the usage of OpenAL
☐ Add OpenAL to the project
☐ Design Audio API
Scripting:
Script Managment class:

@ -48,13 +48,13 @@ namespace lunarium
virtual Color GetClearColor() const = 0;
// Draw Methods
virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color) = 0;
virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth) = 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, float angle = 0.0f) = 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 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 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 DrawString(const char* string, Rectangle boundingArea, Color color, float scale = 1.0f, int font = 0) = 0;

@ -190,11 +190,12 @@ namespace lunarium
}
// 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.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection));
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.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha });
glBindVertexArray(mRectVAO);
@ -273,11 +274,13 @@ namespace lunarium
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.SetUniformMatrix("projection", 1, glm::value_ptr(mProjection));
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.SetUniformf("shapeColor", { color.Red, color.Green, color.Blue, color.Alpha });
glBindVertexArray(mRectVAO);
@ -348,7 +351,7 @@ namespace lunarium
void OglGraphics::DrawImage(Image& image, Rectangle source, Rectangle destination, Color color, float angle)
{
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);
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));
@ -476,24 +479,24 @@ namespace lunarium
GLuint VBO;
GLfloat vertices[] = {
// Pos // Tex
0.0f, 1.0f, 0.0f, 0.0f,
1.0f, 0.0f, 1.0f, 1.0f,
0.0f, 0.0f, 0.0f, 1.0f,
-0.5f, 0.5f, 0.0f, 0.0f,
0.5f, -0.5f, 1.0f, 1.0f,
-0.5f, -0.5f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 0.0f,
1.0f, 1.0f, 1.0f, 0.0f,
1.0f, 0.0f, 1.0f, 1.0f
-0.5f, 0.5f, 0.0f, 0.0f,
0.5f, 0.5f, 1.0f, 0.0f,
0.5f, -0.5f, 1.0f, 1.0f
};
// GLfloat vertices[] = {
// // Pos // Tex
// 0.0f, 1.0f, 0.0f, 1.0f,
// 1.0f, 0.0f, 1.0f, 0.0f,
// 0.0f, 0.0f, 0.0f, 0.0f,
// 0.0f, 1.0f, 0.0f, 0.0f,
// 1.0f, 0.0f, 1.0f, 1.0f,
// 0.0f, 0.0f, 0.0f, 1.0f,
// 0.0f, 1.0f, 0.0f, 1.0f,
// 1.0f, 1.0f, 1.0f, 1.0f,
// 1.0f, 0.0f, 1.0f, 0.0f
// 0.0f, 1.0f, 0.0f, 0.0f,
// 1.0f, 1.0f, 1.0f, 0.0f,
// 1.0f, 0.0f, 1.0f, 1.0f
// };
glGenVertexArrays(1, &mImageVAO);

@ -43,8 +43,8 @@ namespace lunarium
virtual Color GetClearColor() const;
// Draw Methods
virtual void DrawFilledPolygon(float* pVerts, int numVerts, Color color);
virtual void DrawLine(glm::vec2 point1, glm::vec2 point2, Color color, float lineWidth);
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, float angle = 0.0f);
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 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::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::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
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()
{
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

@ -29,6 +29,8 @@ namespace lunarium
// Currently the full default window size
mImageSize.Width = 1280;
mImageSize.Height = 720;
angle = 0.0f;
}
void SimpleRenderScene::OnTick(double delta)
@ -64,6 +66,16 @@ namespace lunarium
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.Height = Math::ClampI(mImageSize.Height, 180, 720);
@ -87,8 +99,8 @@ namespace lunarium
void SimpleRenderScene::OnRender(IGraphics* g)
{
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;
Sizei mImageSize;
Image* mpRenderedImage;
float angle;
};
}

@ -10,6 +10,7 @@
#include "scenes/simpleRenderScene.h"
#include "scenes/physicsScene.h"
#include <core/Core.h>
#include <utils/logger.h>
#include <graphics/igraphics.h>
#include <LunariumConfig.h>
@ -34,8 +35,8 @@ namespace lunarium
Logger::Log(mLogCat, LogLevel::INFO, "BUILDING WITH THE EDITOR!");
#endif
// mpScene = new SimpleRenderScene(mLogCat);
mpScene = new PhysicsScene(mLogCat);
mpScene = new SimpleRenderScene(mLogCat);
// mpScene = new PhysicsScene(mLogCat);
mpScene->OnLoad();
@ -50,6 +51,26 @@ namespace lunarium
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);
}

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

Loading…
Cancel
Save