From 273255ecfe2784945eb73f88f00477b056c13709 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Tue, 7 Jan 2025 19:57:03 +0100 Subject: [PATCH] fixing transformations --- runtime/Sources/Core/Graphics.cpp | 2 +- .../Sources/Renderer/RenderPasses/2DPass.cpp | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/runtime/Sources/Core/Graphics.cpp b/runtime/Sources/Core/Graphics.cpp index 1e89686..a4421c2 100644 --- a/runtime/Sources/Core/Graphics.cpp +++ b/runtime/Sources/Core/Graphics.cpp @@ -143,7 +143,7 @@ namespace mlx m_pixelput_called = false; } Sprite& new_sprite = p_scene->CreateSprite(texture); - new_sprite.SetCenter(Vec2f{ texture->GetWidth() / 2.0f, texture->GetHeight() / 2.0f }); + new_sprite.SetCenter(Vec2f{ texture->GetWidth() * 0.5f, texture->GetHeight() * 0.5f }); new_sprite.SetPosition(Vec2f{ static_cast(x), static_cast(y) }); new_sprite.SetScale(Vec2f{ scale_x, scale_y }); new_sprite.SetRotation(angle); diff --git a/runtime/Sources/Renderer/RenderPasses/2DPass.cpp b/runtime/Sources/Renderer/RenderPasses/2DPass.cpp index 7a68c34..2a13704 100644 --- a/runtime/Sources/Renderer/RenderPasses/2DPass.cpp +++ b/runtime/Sources/Renderer/RenderPasses/2DPass.cpp @@ -100,9 +100,9 @@ namespace mlx for(auto& drawable : drawables) { // Check every textures and update modified ones to GPU before starting the render pass - drawable->Update(cmd); if(!drawable->IsSetInit()) drawable->UpdateDescriptorSet(p_texture_set); + drawable->Update(cmd); } m_pipeline.BindPipeline(cmd, 0, {}); @@ -110,11 +110,19 @@ namespace mlx { DrawableData drawable_data; drawable_data.color = drawable->GetColor(); + + Mat4f rotation_matrix = Mat4f::Identity(); + rotation_matrix.ApplyTranslation(Vec3f{ -drawable->GetCenter(), 0.0f }); + rotation_matrix.ApplyRotation(drawable->GetRotation()); + rotation_matrix.ApplyTranslation(Vec3f{ drawable->GetCenter(), 0.0f }); + + Mat4f translation_matrix = Mat4f::Identity().ApplyTranslation(Vec3f{ drawable->GetPosition(), 0.0f }); + Mat4f scale_matrix = Mat4f::Identity().ApplyScale(Vec3f{ drawable->GetScale(), 1.0f }); + drawable_data.model_matrix = Mat4f::Identity(); - drawable_data.model_matrix.ApplyTranslation(Vec3f{ -drawable->GetCenter() / 2.0f, 0.0f }); - drawable_data.model_matrix.ApplyRotation(drawable->GetRotation()); - drawable_data.model_matrix.ApplyTranslation(Vec3f{ drawable->GetPosition() + drawable->GetCenter() / 2.0f, 0.0f }); - drawable_data.model_matrix.ApplyScale(Vec3f{ drawable->GetScale(), 1.0f }); + drawable_data.model_matrix.ConcatenateTransform(rotation_matrix); + drawable_data.model_matrix.ConcatenateTransform(scale_matrix); + drawable_data.model_matrix.ConcatenateTransform(translation_matrix); drawable->Bind(frame_index, cmd);