From 30725c80c7774aa5a8164041e770645e12db7ac1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 24 Oct 2024 20:15:59 +0300 Subject: [PATCH] update VEC3 structure --- doc/specs/vec3_model_spec.md | 4 ++-- res/content/base/models/demo.vec3 | Bin 2116 -> 2116 bytes src/assets/assetload_funcs.cpp | 12 +++++++---- src/coders/vec3.cpp | 34 +++++++++++++----------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/doc/specs/vec3_model_spec.md b/doc/specs/vec3_model_spec.md index 681fead6..b9c2868c 100644 --- a/doc/specs/vec3_model_spec.md +++ b/doc/specs/vec3_model_spec.md @@ -57,10 +57,10 @@ struct Header { sizeof(Header) == 12; struct Body { - uint16 model_count uint16 material_count - Model models[]; + uint16 model_count Material materials[]; + Model models[]; }; sizeof(Body) == 4; // + dynamic models array + dynamic materials array diff --git a/res/content/base/models/demo.vec3 b/res/content/base/models/demo.vec3 index 167be1e08bfda450c789a929f92693f848077f82..bd132c6e340abfd7c407200a60d2f4ce63a028d5 100644 GIT binary patch delta 29 jcmX>ia6~|Wfg#M**_eTWk%57M2}n*>;858pAix0tPpJfk delta 28 hcmX>ia6~|Wfg#M**_eTWkpYC67&e*+a7+|X0RT(a1dsp# diff --git a/src/assets/assetload_funcs.cpp b/src/assets/assetload_funcs.cpp index 0f69e64e..41d50e43 100644 --- a/src/assets/assetload_funcs.cpp +++ b/src/assets/assetload_funcs.cpp @@ -181,8 +181,7 @@ assetload::postfunc assetload::sound( if (!fs::exists(variantFile)) { break; } - baseSound->variants.emplace_back(audio::load_sound(variantFile, keepPCM) - ); + baseSound->variants.emplace_back(audio::load_sound(variantFile, keepPCM)); } auto sound = baseSound.release(); @@ -191,8 +190,13 @@ assetload::postfunc assetload::sound( }; } -assetload::postfunc assetload:: - model(AssetsLoader* loader, const ResPaths* paths, const std::string& file, const std::string& name, const std::shared_ptr&) { +assetload::postfunc assetload::model( + AssetsLoader* loader, + const ResPaths* paths, + const std::string& file, + const std::string& name, + const std::shared_ptr& +) { auto path = paths->find(file + ".obj"); auto text = files::read_string(path); try { diff --git a/src/coders/vec3.cpp b/src/coders/vec3.cpp index d6db56c3..fbf40a11 100644 --- a/src/coders/vec3.cpp +++ b/src/coders/vec3.cpp @@ -107,7 +107,9 @@ static model::Mesh build_mesh( return model::Mesh {texture, std::move(vertices)}; } -static model::Mesh load_mesh(ByteReader& reader) { +static model::Mesh load_mesh( + ByteReader& reader, const std::vector& materials +) { int triangleCount = reader.getInt32(); int materialId = reader.getInt16(); int flags = reader.getInt16(); @@ -145,12 +147,13 @@ static model::Mesh load_mesh(ByteReader& reader) { return build_mesh( attributes, indices, - // encode material index to UTF-8 because materials are not loaded yet - util::wstr2str_utf8(std::wstring({static_cast(materialId)})) + materials.at(materialId).name ); } -static Model load_model(ByteReader& reader) { +static Model load_model( + ByteReader& reader, const std::vector& materials +) { int nameLength = reader.getInt16(); assert(nameLength >= 0); float x = reader.getFloat32(); @@ -161,7 +164,7 @@ static Model load_model(ByteReader& reader) { std::vector meshes; for (int i = 0; i < meshCount; i++) { - meshes.push_back(load_mesh(reader)); + meshes.push_back(load_mesh(reader, materials)); } util::Buffer chars(nameLength); reader.get(chars.data(), nameLength); @@ -194,27 +197,20 @@ File vec3::load( assert(reserved == 0); // Body - int modelCount = reader.getInt16(); int materialCount = reader.getInt16(); - assert(modelCount >= 0); + int modelCount = reader.getInt16(); assert(materialCount >= 0); + assert(modelCount >= 0); - std::unordered_map models; - for (int i = 0; i < modelCount; i++) { - Model model = load_model(reader); - models[model.name] = std::move(model); - } std::vector materials; for (int i = 0; i < materialCount; i++) { materials.push_back(load_material(reader)); } - - // Resolve textures - for (auto& [_, model] : models) { - for (auto& mesh : model.model.meshes) { - int materialId = util::str2wstr_utf8(mesh.texture).at(0); - mesh.texture = materials.at(materialId).name; - } + + std::unordered_map models; + for (int i = 0; i < modelCount; i++) { + Model model = load_model(reader, materials); + models[model.name] = std::move(model); } return File {std::move(models), std::move(materials)}; }