From 7ec107dfd8dee21bf60fdeb948ffe040d174d68a Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 14 Apr 2022 10:32:41 -0400 Subject: [PATCH] Add level of detail selection in mdlviewer --- mdlviewer/include/mainwindow.h | 1 + mdlviewer/src/mainwindow.cpp | 14 +++++++++++++- renderer/include/renderer.hpp | 2 +- renderer/src/renderer.cpp | 4 ++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/mdlviewer/include/mainwindow.h b/mdlviewer/include/mainwindow.h index fde6db0..b545240 100644 --- a/mdlviewer/include/mainwindow.h +++ b/mdlviewer/include/mainwindow.h @@ -71,6 +71,7 @@ private: std::vector loadedGears; Race currentRace = Race::HyurMidlanderMale; + int currentLod = 0; GameData& data; diff --git a/mdlviewer/src/mainwindow.cpp b/mdlviewer/src/mainwindow.cpp index 3f115bb..a285428 100644 --- a/mdlviewer/src/mainwindow.cpp +++ b/mdlviewer/src/mainwindow.cpp @@ -174,6 +174,18 @@ MainWindow::MainWindow(GameData& data) : data(data) { controlLayout->addWidget(raceCombo); + auto lodCombo = new QComboBox(); + lodCombo->addItem("0"); + lodCombo->addItem("1"); + lodCombo->addItem("2"); + + connect(lodCombo, qOverload(&QComboBox::currentIndexChanged), [this](int index) { + currentLod = index; + refreshModel(); + }); + + controlLayout->addWidget(lodCombo); + QPushButton* exportButton = new QPushButton("Export"); connect(exportButton, &QPushButton::clicked, [this] { @@ -212,7 +224,7 @@ void MainWindow::refreshModel() { data.extractFile(resolvedModelPath.toStdString(), "top.mdl"); #ifndef USE_STANDALONE_WINDOW - vkWindow->models.push_back(renderer->addModel(parseMDL("top.mdl"))); + vkWindow->models.push_back(renderer->addModel(parseMDL("top.mdl"), currentLod)); #else standaloneWindow->models.push_back(renderer->addModel(parseMDL("top.mdl"))); #endif diff --git a/renderer/include/renderer.hpp b/renderer/include/renderer.hpp index 3b55d59..62e15e5 100644 --- a/renderer/include/renderer.hpp +++ b/renderer/include/renderer.hpp @@ -26,7 +26,7 @@ public: bool initSwapchain(VkSurfaceKHR surface, int width, int height); void resize(VkSurfaceKHR surface, int width, int height); - RenderModel addModel(const Model& model); + RenderModel addModel(const Model& model, int lod); void render(std::vector models); diff --git a/renderer/src/renderer.cpp b/renderer/src/renderer.cpp index b3b8ae6..14512ac 100644 --- a/renderer/src/renderer.cpp +++ b/renderer/src/renderer.cpp @@ -508,11 +508,11 @@ uint32_t Renderer::findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags pro return -1; } -RenderModel Renderer::addModel(const Model& model) { +RenderModel Renderer::addModel(const Model& model, int lod) { RenderModel renderModel; renderModel.model = model; - for(auto part : model.lods[0].parts) { + for(auto part : model.lods[lod].parts) { RenderPart renderPart; size_t vertexSize = part.vertices.size() * sizeof(Vertex);