From 87b9db3f7e89866fdb52b7a3c83a252bc1fe77f9 Mon Sep 17 00:00:00 2001 From: Javidx9 <25419386+OneLoneCoder@users.noreply.github.com> Date: Sun, 3 Feb 2019 14:33:47 +0000 Subject: [PATCH] Updated Graphics 2D --- OneLoneCoder_PGE_ExtensionTestGFX2D.cpp | 19 ++++++++------ olcPGEX_Graphics2D.h | 33 ++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp b/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp index c54237a..7794c7d 100644 --- a/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp +++ b/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp @@ -46,7 +46,7 @@ Author ~~~~~~ - David Barr, aka javidx9, ©OneLoneCoder 2018 + David Barr, aka javidx9, ©OneLoneCoder 2018 */ // Include the olcPixelGameEngine @@ -54,6 +54,7 @@ #include "olcPixelGameEngine.h" // To use an extension, just include it +#define OLC_PGE_GRAPHICS2D #include "olcPGEX_Graphics2D.h" class TestExtension : public olc::PixelGameEngine @@ -70,7 +71,7 @@ public: for (int i = 0; i < 16; i++) listEvents.push_back(""); - spr = new olc::Sprite("logo_long.png"); + spr = new olc::Sprite("new_piskel.png"); return true; } @@ -90,8 +91,8 @@ public: DrawCircle(96, 32, 30); // Circle - float mx = GetMouseX(); - float my = GetMouseY(); + float mx = (float)GetMouseX(); + float my = (float)GetMouseY(); float px1 = mx - 32, px2 = mx - 96; float py1 = my - 32, py2 = my - 32; @@ -101,8 +102,8 @@ public: py1 = 22.0f * (py1 * pr1) + 32.0f; px2 = 22.0f * (px2 * pr2) + 96.0f; py2 = 22.0f * (py2 * pr2) + 32.0f; - FillCircle(px1, py1, 8, olc::CYAN); - FillCircle(px2, py2, 8, olc::CYAN); + FillCircle((int32_t)px1, (int32_t)py1, 8, olc::CYAN); + FillCircle((int32_t)px2, (int32_t)py2, 8, olc::CYAN); DrawLine(10, 70, 54, 70); // Lines DrawLine(54, 70, 70, 54); @@ -136,6 +137,8 @@ public: nLog++; } + std::string notes = "CDEFGAB"; + // Test Text scaling and colours DrawString(0, 360, "Text Scale = 1", olc::WHITE, 1); @@ -168,6 +171,8 @@ public: // Use extension to draw sprite with transform applied olc::GFX2D::DrawSprite(spr, t1); + + DrawSprite((int32_t)mx, (int32_t)my, spr, 4); return true; } @@ -181,4 +186,4 @@ int main() demo.Start(); return 0; -} +} \ No newline at end of file diff --git a/olcPGEX_Graphics2D.h b/olcPGEX_Graphics2D.h index 9802128..261a5c0 100644 --- a/olcPGEX_Graphics2D.h +++ b/olcPGEX_Graphics2D.h @@ -3,7 +3,7 @@ +-------------------------------------------------------------+ | OneLoneCoder Pixel Game Engine Extension | - | Advanced 2D Rendering - v0.3 | + | Advanced 2D Rendering - v0.4 | +-------------------------------------------------------------+ What is this? @@ -15,7 +15,7 @@ License (OLC-3) ~~~~~~~~~~~~~~~ - Copyright 2018 OneLoneCoder.com + Copyright 2018 - 2019 OneLoneCoder.com Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -56,7 +56,7 @@ Author ~~~~~~ - David Barr, aka javidx9, ©OneLoneCoder 2018 + David Barr, aka javidx9, ©OneLoneCoder 2019 */ /* @@ -99,6 +99,8 @@ namespace olc inline void Scale(float sx, float sy); // Append a shear operation (sx, sy) to this transform inline void Shear(float sx, float sy); + + inline void Perspective(float ox, float oy); // Calculate the Forward Transformation of the coordinate (in_x, in_y) -> (out_x, out_y) inline void Forward(float in_x, float in_y, float &out_x, float &out_y); // Calculate the Inverse Transformation of the coordinate (in_x, in_y) -> (out_x, out_y) @@ -121,7 +123,8 @@ namespace olc } - +#ifdef OLC_PGE_GRAPHICS2D +#undef OLC_PGE_GRAPHICS2D namespace olc { @@ -250,16 +253,37 @@ namespace olc Multiply(); } + void olc::GFX2D::Transform2D::Perspective(float ox, float oy) + { + // Construct Translate Matrix + matrix[2][0][0] = 1.0f; matrix[2][1][0] = 0.0f; matrix[2][2][0] = 0.0f; + matrix[2][0][1] = 0.0f; matrix[2][1][1] = 1.0f; matrix[2][2][1] = 0.0f; + matrix[2][0][2] = ox; matrix[2][1][2] = oy; matrix[2][2][2] = 1.0f; + Multiply(); + } + void olc::GFX2D::Transform2D::Forward(float in_x, float in_y, float &out_x, float &out_y) { out_x = in_x * matrix[nSourceMatrix][0][0] + in_y * matrix[nSourceMatrix][1][0] + matrix[nSourceMatrix][2][0]; out_y = in_x * matrix[nSourceMatrix][0][1] + in_y * matrix[nSourceMatrix][1][1] + matrix[nSourceMatrix][2][1]; + float out_z = in_x * matrix[nSourceMatrix][0][2] + in_y * matrix[nSourceMatrix][1][2] + matrix[nSourceMatrix][2][2]; + if (out_z != 0) + { + out_x /= out_z; + out_y /= out_z; + } } void olc::GFX2D::Transform2D::Backward(float in_x, float in_y, float &out_x, float &out_y) { out_x = in_x * matrix[3][0][0] + in_y * matrix[3][1][0] + matrix[3][2][0]; out_y = in_x * matrix[3][0][1] + in_y * matrix[3][1][1] + matrix[3][2][1]; + float out_z = in_x * matrix[3][0][2] + in_y * matrix[3][1][2] + matrix[3][2][2]; + if (out_z != 0) + { + out_x /= out_z; + out_y /= out_z; + } } void olc::GFX2D::Transform2D::Invert() @@ -285,4 +309,5 @@ namespace olc } } +#endif #endif \ No newline at end of file