From 38484415f10e8d9066668be59ecc83709f5f4b5f Mon Sep 17 00:00:00 2001 From: antopilo Date: Mon, 16 Sep 2024 17:28:01 -0400 Subject: [PATCH] Now displaying camera frustum gizmo --- Editor/src/Misc/GizmoDrawer.cpp | 22 +++++++++++++++++++++- Nuake/src/Rendering/SceneRenderer.cpp | 10 ++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Editor/src/Misc/GizmoDrawer.cpp b/Editor/src/Misc/GizmoDrawer.cpp index 8571bdd1..d5379941 100644 --- a/Editor/src/Misc/GizmoDrawer.cpp +++ b/Editor/src/Misc/GizmoDrawer.cpp @@ -27,6 +27,7 @@ #include #include + GizmoDrawer::GizmoDrawer(EditorInterface* editor) { m_LineShader = Nuake::ShaderManager::GetShader("Resources/Shaders/line.shader"); @@ -222,6 +223,8 @@ void GizmoDrawer::DrawGizmos(Ref scene, bool occluded) { using namespace Nuake; + auto camView = scene->m_Registry.view(); + RenderCommand::Enable(RendererEnum::DEPTH_TEST); glLineWidth(3.0f); @@ -459,6 +462,24 @@ void GizmoDrawer::DrawGizmos(Ref scene, bool occluded) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } + for (auto e : camView) + { + auto [transform, camera] = scene->m_Registry.get(e); + const Quat& globalRotation = glm::normalize(transform.GetGlobalRotation()); + const Matrix4& rotationMatrix = glm::mat4_cast(globalRotation); + + m_LineShader->Bind(); + m_LineShader->SetUniform("u_Opacity", 1.f); + const float aspectRatio = camera.CameraInstance->AspectRatio; + const float fov = camera.CameraInstance->Fov; + Matrix4 clampedPerspective = glm::perspectiveFov(glm::radians(fov), 9.0f * aspectRatio, 9.0f, 0.05f, 3.0f); + m_LineShader->SetUniform("u_View", glm::translate(scene->m_EditorCamera->GetTransform(), Vector3(transform.GetGlobalTransform()[3])) * rotationMatrix * glm::inverse(clampedPerspective)); + m_LineShader->SetUniform("u_Projection", scene->m_EditorCamera->GetPerspective()); + + m_BoxBuffer->Bind(); + Nuake::RenderCommand::DrawLines(0, 26); + } + auto flatShader = ShaderManager::GetShader("Resources/Shaders/flat.shader"); flatShader->Bind(); flatShader->SetUniform("u_View", scene->m_EditorCamera->GetTransform()); @@ -484,7 +505,6 @@ void GizmoDrawer::DrawGizmos(Ref scene, bool occluded) const Vector3 gizmoSize = Vector3(Engine::GetProject()->Settings.GizmoSize); // Camera - auto camView = scene->m_Registry.view(); for (auto e : camView) { gizmoShader->SetUniform("gizmo_texture", TextureManager::Get()->GetTexture("Resources/Gizmos/camera.png").get()); diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 773af6cb..2936c6e4 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -471,6 +471,11 @@ namespace Nuake { // Fetch resource from resource manager using UUID Ref uiResource = ResourceManager::GetResource(uiComponent.UIResource); + if (!uiResource) + { + continue; + } + uiResource->Resize(framebuffer.GetSize()); // Copy UI onto final viewport @@ -989,6 +994,11 @@ namespace Nuake } Ref uiResource = ResourceManager::GetResource(uiComponent.UIResource); + if (!uiResource) + { + continue; + } + Matrix4 finalTransform = transform.GetGlobalTransform(); Renderer::QuadMesh->GetMaterial()->SetAlbedo(uiResource->GetOutputTexture()); Renderer::SubmitMesh(Renderer::QuadMesh, finalTransform, (uint32_t)e);