diff --git a/VulkanTest b/VulkanTest index ead6bc1..6c769c1 100755 Binary files a/VulkanTest and b/VulkanTest differ diff --git a/build/first_app.o b/build/first_app.o index ae714a1..83d46c5 100644 Binary files a/build/first_app.o and b/build/first_app.o differ diff --git a/cve_game_object.hpp b/cve_game_object.hpp index fcc4e0c..2836ba6 100644 --- a/cve_game_object.hpp +++ b/cve_game_object.hpp @@ -8,7 +8,17 @@ namespace cve { struct Transform2dComponent { glm::vec2 translation{}; // Position offset - glm::mat2 mat2() { return glm::mat2{1.f}; }; + glm::vec2 scale{1.f, 1.f}; + float rotation; + + glm::mat2 mat2() { + const float s = glm::sin(rotation); + const float c = glm::cos(rotation); + glm::mat2 rotMatrix{{c, s}, {-s, c}}; + + glm::mat2 scaleMat{{scale.x, .0f}, {.0f, scale.y}}; + return rotMatrix*scaleMat; + }; }; class CveGameObject { diff --git a/first_app.cpp b/first_app.cpp index 7c3fa18..19acd31 100644 --- a/first_app.cpp +++ b/first_app.cpp @@ -6,6 +6,7 @@ #define GLM_FORCE_RADIANS #define GLM_FORCE_DEPTH_ZERO_TO_ONE #include +#include namespace cve { struct SimplePushConstantData{ @@ -47,6 +48,8 @@ namespace cve { triangle.model = cveModel; triangle.color = {0.1f, 0.8f, 0.1f}; triangle.transform2d.translation.x = .2f; + triangle.transform2d.scale = {2.f, .5f}; + triangle.transform2d.rotation = .25f * glm::two_pi(); gameObjects.push_back(std::move(triangle)); } @@ -179,6 +182,8 @@ namespace cve { cvePipeline->bind(commandBuffer); for (auto& obj: gameObjects) { + obj.transform2d.rotation = glm::mod(obj.transform2d.rotation + 0.001f, glm::two_pi()); + SimplePushConstantData push{}; push.offset = obj.transform2d.translation; push.color = obj.color;