diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/aabb.hpp | 24 | ||||
| -rw-r--r-- | include/gltf.hpp | 16 |
2 files changed, 24 insertions, 16 deletions
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 <filesystem>
#include <vector>
+#include <optional>
#include <nlohmann/json.hpp>
@@ -17,18 +18,25 @@ struct mesh_part { };
struct mesh {
- std::vector<std::vector<mesh_part>> nodes;
+ std::vector<mesh_part> parts;
+};
+
+struct node {
+ std::vector<node> children;
+ std::optional<mesh> 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<std::vector<uint8_t>> &buffers_content, mesh& gltf_mesh);
+ static void load_node(json &gltf_json, uint32_t index, node &parent, std::vector<mesh> &meshes);
+
+ static std::vector<mesh> load_meshes(json &gltf_json, std::vector<std::vector<uint8_t>> &buffers_content);
- static void load_primitive(json &gltf_json, json &primitive, std::vector<std::vector<uint8_t>> &buffers_content, mesh& gltf_mesh);
+ static mesh_part load_primitive(json &gltf_json, json &primitive, std::vector<std::vector<uint8_t>> &buffers_content);
};
#endif
|
