From e1cbdd1d61ffb04ae156fe67923ec5e0871021f1 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Sun, 15 Aug 2021 23:17:06 +0200 Subject: Improve gltf loading --- include/aabb.hpp | 24 ++++++++++++------------ include/gltf.hpp | 16 ++++++++++++---- 2 files changed, 24 insertions(+), 16 deletions(-) (limited to 'include') diff --git a/include/aabb.hpp b/include/aabb.hpp index 9bc69d1..cdbb79a 100644 --- a/include/aabb.hpp +++ b/include/aabb.hpp @@ -26,23 +26,23 @@ class aabb { } void union_with(const aabb &box) { - minimum.x = fmin(minimum.x, box.minimum.x); - minimum.y = fmin(minimum.y, box.minimum.y); - minimum.z = fmin(minimum.z, box.minimum.z); + minimum.x = minimum.x < box.minimum.x ? minimum.x : box.minimum.x; + minimum.y = minimum.y < box.minimum.y ? minimum.y : box.minimum.y; + minimum.z = minimum.z < box.minimum.z ? minimum.z : box.minimum.z; - maximum.x = fmax(maximum.x, box.maximum.x); - maximum.y = fmax(maximum.y, box.maximum.y); - maximum.z = fmax(maximum.z, box.maximum.z); + maximum.x = maximum.x > box.maximum.x ? maximum.x : box.maximum.x; + maximum.y = maximum.y > box.maximum.y ? maximum.y : box.maximum.y; + maximum.z = maximum.z > box.maximum.z ? maximum.z : box.maximum.z; } void union_with(const point3 &point) { - minimum.x = fmin(minimum.x, point.x); - minimum.y = fmin(minimum.y, point.y); - minimum.z = fmin(minimum.z, point.z); + minimum.x = minimum.x < point.x ? minimum.x : point.x; + minimum.y = minimum.y < point.y ? minimum.y : point.y; + minimum.z = minimum.z < point.z ? minimum.z : point.z; - maximum.x = fmax(maximum.x, point.x); - maximum.y = fmax(maximum.y, point.y); - maximum.z = fmax(maximum.z, point.z); + maximum.x = maximum.x > point.x ? maximum.x : point.x; + maximum.y = maximum.y > point.y ? maximum.y : point.y; + maximum.z = maximum.z > point.z ? maximum.z : point.z; } int32_t maximum_axis() { diff --git a/include/gltf.hpp b/include/gltf.hpp index 0a34888..7008e8a 100644 --- a/include/gltf.hpp +++ b/include/gltf.hpp @@ -3,6 +3,7 @@ #include #include +#include #include @@ -17,18 +18,25 @@ struct mesh_part { }; struct mesh { - std::vector> nodes; + std::vector parts; +}; + +struct node { + std::vector children; + std::optional mesh; }; class gltf { public: - static mesh load(std::filesystem::path &path, std::string &filename); + static node load(std::filesystem::path &path, std::string &filename); private: - static void load_node(json &gltf_json, json &node, std::vector> &buffers_content, mesh& gltf_mesh); + static void load_node(json &gltf_json, uint32_t index, node &parent, std::vector &meshes); + + static std::vector load_meshes(json &gltf_json, std::vector> &buffers_content); - static void load_primitive(json &gltf_json, json &primitive, std::vector> &buffers_content, mesh& gltf_mesh); + static mesh_part load_primitive(json &gltf_json, json &primitive, std::vector> &buffers_content); }; #endif -- cgit v1.3