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();