From 05096355be25fce51e2a824237a18df66ab6e573 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Thu, 29 Aug 2024 12:54:31 -0400 Subject: [PATCH 1/2] Fixed spot light transformation --- Editor/src/Misc/GizmoDrawer.cpp | 2 +- Nuake/src/Rendering/Renderer.cpp | 19 ++----------------- Nuake/src/Rendering/SceneRenderer.cpp | 4 +++- 3 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Editor/src/Misc/GizmoDrawer.cpp b/Editor/src/Misc/GizmoDrawer.cpp index db40deb6..2fd37f8e 100644 --- a/Editor/src/Misc/GizmoDrawer.cpp +++ b/Editor/src/Misc/GizmoDrawer.cpp @@ -366,7 +366,7 @@ void GizmoDrawer::DrawGizmos(Ref scene, bool occluded) Matrix4 gizmoPosition = Matrix4(1.0f); gizmoPosition = glm::translate(scene->m_EditorCamera->GetTransform(), Vector3(transform.GetGlobalTransform()[3])); gizmoPosition = gizmoPosition * rotationMatrix; - gizmoPosition = glm::translate(gizmoPosition, { 0, cylinderLength / 2.0, 0 }); + gizmoPosition = glm::translate(gizmoPosition, { 0, -cylinderLength / 2.0, 0 }); m_LineShader->Bind(); m_LineShader->SetUniform1f("u_Opacity", 1.0f); diff --git a/Nuake/src/Rendering/Renderer.cpp b/Nuake/src/Rendering/Renderer.cpp index 11503f52..bfa8537a 100644 --- a/Nuake/src/Rendering/Renderer.cpp +++ b/Nuake/src/Rendering/Renderer.cpp @@ -318,6 +318,7 @@ namespace Nuake if (light.Type == Spot) { + direction = transform.GetGlobalRotation() * Vector3(0, 0, -1); deferredShader->SetUniform3f(uniformAccessor + "Direction", direction.x, direction.y, direction.z); deferredShader->SetUniform1f(uniformAccessor + "OuterAngle", glm::cos(Rad(light.OuterCutoff))); deferredShader->SetUniform1f(uniformAccessor + "InnerAngle", glm::cos(Rad(light.Cutoff))); @@ -326,23 +327,7 @@ namespace Nuake { int shadowMapTextureSlot = 22 + spotShadowMapCount; deferredShader->SetUniform1f(uniformAccessor + "ShadowMapID", spotShadowMapCount); - - Matrix4 spotLightTransform = Matrix4(1.0f); - Vector3 pos = transform.GetGlobalPosition(); - pos.y *= -1.0f; - pos.x *= -1.0f; - pos.z *= -1.0f; - spotLightTransform = glm::translate(spotLightTransform, pos); - - Vector3 direction = transform.GetGlobalRotation() * Vector3(0, 0, 1); - auto lookatAt = lookAt(Vector3(), direction, Vector3(0, 1, 0)); - Quat offset = QuatFromEuler(0, -90.0f, 0); - Quat offset2 = QuatFromEuler(180.0f, 0.0f, 0); - - const Quat& globalRotation = glm::normalize(transform.GetGlobalRotation()); - const Matrix4& rotationMatrix = glm::mat4_cast(globalRotation); - - deferredShader->SetUniformMat4f(uniformAccessor + "Transform", light.GetProjection() * lookatAt * spotLightTransform); + deferredShader->SetUniformMat4f(uniformAccessor + "Transform", light.GetProjection() * glm::inverse(transform.GetGlobalTransform())); if (ImGui::Begin(("DebugShadowMap" + std::to_string(idx)).c_str())) { diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index b6bcc725..d0dee11e 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -594,6 +594,8 @@ namespace Nuake light.m_Framebuffers[0]->Clear(); { Matrix4 spotLightTransform = Matrix4(1.0f); + + Vector3 pos = lightTransform.GetGlobalPosition(); pos.y *= -1.0f; pos.x *= -1.0f; @@ -608,7 +610,7 @@ namespace Nuake const Quat& globalRotation = glm::normalize(lightTransform.GetGlobalRotation()); const Matrix4& rotationMatrix = glm::mat4_cast(globalRotation); - shader->SetUniformMat4f("u_LightTransform", light.GetProjection() * lookatAt * spotLightTransform); + shader->SetUniformMat4f("u_LightTransform", light.GetProjection() * glm::inverse(lightTransform.GetGlobalTransform())); for (auto e : meshView) { auto [transform, mesh, visibility] = meshView.get(e); From be725f52f2e60f69e6f1d6563d589adee2b8a0c5 Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Tue, 3 Sep 2024 16:41:52 -0400 Subject: [PATCH 2/2] Check if .map file exists --- Nuake/src/Scene/Scene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Nuake/src/Scene/Scene.cpp b/Nuake/src/Scene/Scene.cpp index f4bd4b69..ce3e10db 100644 --- a/Nuake/src/Scene/Scene.cpp +++ b/Nuake/src/Scene/Scene.cpp @@ -268,7 +268,7 @@ namespace Nuake for (const auto& e : view) { auto& map = view.get(e); - if (map.AutoRebuild && !map.Path.empty()) + if (map.AutoRebuild && !map.Path.empty() && FileSystem::FileExists(map.Path)) { if (auto file = FileSystem::GetFile(map.Path); file->IsValid() && file->GetHasBeenModified()) {