From 5d5e3e33d0de54b755ac664f91ca363230d41d5f Mon Sep 17 00:00:00 2001 From: Antoine Pilote Date: Wed, 28 Aug 2024 01:03:49 -0400 Subject: [PATCH] =?UTF-8?q?1000th=20commit!=20=F0=9F=8E=89=20-=20Added=20.?= =?UTF-8?q?Mesh=20thumbnail=20preview=20+=20outlines=20now=20scales=20with?= =?UTF-8?q?=20resolution=20scaling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/src/Misc/ThumbnailManager.cpp | 32 +++++++++++++++++++++++++++ Editor/src/Windows/FileSystemUI.cpp | 8 +++++++ Nuake/src/Core/FileSystem.h | 7 ++++++ Nuake/src/Rendering/Mesh/Mesh.cpp | 1 + Nuake/src/Rendering/SceneRenderer.cpp | 2 +- 5 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Editor/src/Misc/ThumbnailManager.cpp b/Editor/src/Misc/ThumbnailManager.cpp index 5441f0a1..151af8d1 100644 --- a/Editor/src/Misc/ThumbnailManager.cpp +++ b/Editor/src/Misc/ThumbnailManager.cpp @@ -155,6 +155,38 @@ Ref ThumbnailManager::GenerateThumbnail(const std::string& path, //} //m_ShadedFramebuffer->Unbind(); } + else if (file->GetFileType() == FileType::Mesh) + { + Ref scene = Scene::New(); + Ref env = scene->GetEnvironment(); + env->CurrentSkyType = SkyType::ClearColor; + env->ProceduralSkybox->SunDirection = { 0.88f, 0.34f, -0.14f }; + + Entity camera = scene->CreateEntity("Camera"); + TransformComponent& camTransform = camera.GetComponent(); + camTransform.SetLocalPosition({ 0.0f, 0.5f, 2.0f }); + + CameraComponent& camComponent = camera.AddComponent(); + camComponent.CameraInstance->Fov = 45.0f; + camComponent.CameraInstance->AspectRatio = 1.0f; + + LightComponent& previewLight = scene->CreateEntity("_directionalLight").AddComponent(); + previewLight.SetCastShadows(false); + previewLight.Type = LightType::Directional; + previewLight.Strength = 5.0f; + previewLight.SyncDirectionWithSky = true; + + m_ShadedFramebuffer->SetTexture(texture); + + ModelComponent& modelComp = scene->CreateEntity("Mesh").AddComponent(); + modelComp.ModelResource = ResourceLoader::LoadModel(file->GetRelativePath()); + + AABB aabb = modelComp.ModelResource->GetMeshes()[0]->GetAABB(); + Vector3 middlePoint = aabb.Max / 2.0f; + + scene->Update(0.01f); + scene->Draw(*m_ShadedFramebuffer.get()); + } else if (file->GetFileType() == FileType::Material) { // Gbuffer pass diff --git a/Editor/src/Windows/FileSystemUI.cpp b/Editor/src/Windows/FileSystemUI.cpp index 2a962add..2492a80f 100644 --- a/Editor/src/Windows/FileSystemUI.cpp +++ b/Editor/src/Windows/FileSystemUI.cpp @@ -365,6 +365,14 @@ namespace Nuake textureImage = image; } } + else if (fileType == FileType::Mesh) + { + auto image = ThumbnailManager::Get().GetThumbnail(file->GetRelativePath()); + if (image) + { + textureImage = image; + } + } ImGui::SetCursorPos(prevCursor); ImGui::Image(reinterpret_cast(textureImage->GetID()), ImVec2(100, 100), ImVec2(0, 1), ImVec2(1, 0)); diff --git a/Nuake/src/Core/FileSystem.h b/Nuake/src/Core/FileSystem.h index 0acb0d25..e6ec8c1c 100644 --- a/Nuake/src/Core/FileSystem.h +++ b/Nuake/src/Core/FileSystem.h @@ -58,6 +58,7 @@ namespace Nuake Unkown, Image, Material, + Mesh, Script, NetScript, Project, @@ -140,11 +141,17 @@ namespace Nuake { return FileType::NetScript; } + if (ext == ".sln") { return FileType::Solution; } + if (ext == ".mesh") + { + return FileType::Mesh; + } + return FileType::Unkown; } diff --git a/Nuake/src/Rendering/Mesh/Mesh.cpp b/Nuake/src/Rendering/Mesh/Mesh.cpp index 2546e774..8413b30f 100644 --- a/Nuake/src/Rendering/Mesh/Mesh.cpp +++ b/Nuake/src/Rendering/Mesh/Mesh.cpp @@ -213,6 +213,7 @@ namespace Nuake ); m_Vertices = result.get(); + CalculateAABB(); SetupMesh(); return true; diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 91bf429b..5cce3d0c 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -242,7 +242,7 @@ namespace Nuake shader->SetUniformTex("u_EntityTexture", mGBuffer->GetTexture(GL_COLOR_ATTACHMENT3).get(), 0); shader->SetUniformVec4("u_OutlineColor", projectSettings.PrimaryColor); shader->SetUniformTex("u_Depth", mGBuffer->GetTexture(GL_DEPTH_ATTACHMENT), 1); - shader->SetUniform1f("u_Radius", projectSettings.OutlineRadius); + shader->SetUniform1f("u_Radius", projectSettings.OutlineRadius * projectSettings.ResolutionScale); Renderer::DrawQuad(); } mOutlineBuffer->Unbind();