From 49721f0fd489b234a9089cb53bd51e6f1ab26f7d Mon Sep 17 00:00:00 2001 From: "Arthur Brainville (Ybalrid)" Date: Mon, 19 Feb 2018 14:30:28 +0100 Subject: [PATCH] Add the entry point for loading gltf files. Also switch on the primitive mode of each mesh. Will only attempt to load lists of triangles for now... Signed-off by: Arthur Brainville (Ybalrid) --- examples/raytrace/config.json | 32 +++++++++++++++++------- examples/raytrace/gltf-loader.cc | 42 ++++++++++++++++++++++++++++++++ examples/raytrace/main.cc | 9 +++++++ 3 files changed, 74 insertions(+), 9 deletions(-) diff --git a/examples/raytrace/config.json b/examples/raytrace/config.json index 78d1024..6b4984d 100644 --- a/examples/raytrace/config.json +++ b/examples/raytrace/config.json @@ -1,9 +1,23 @@ -{ "obj_filename" : "cornellbox_suzanne.obj", - "scene_scale" : 1.0, - "width" : 512, - "height" : 512, - "eye" : [0, 2.5, 15], - "up" : [0, 1, 0], - "look_at" : [0, 0, 0], - "dummy" : 0 -} +{ + "obj_filename": "cornellbox_suzanne.obj", + "gltf_filename": "../../models/Cube/Cube.gltf", + "scene_scale": 1.0, + "width": 512, + "height": 512, + "eye": [ + 0, + 2.5, + 15 + ], + "up": [ + 0, + 1, + 0 + ], + "look_at": [ + 0, + 0, + 0 + ], + "dummy": 0 +} \ No newline at end of file diff --git a/examples/raytrace/gltf-loader.cc b/examples/raytrace/gltf-loader.cc index 26cdb48..5ab5ac7 100644 --- a/examples/raytrace/gltf-loader.cc +++ b/examples/raytrace/gltf-loader.cc @@ -47,6 +47,48 @@ bool LoadGLTF(const std::string &filename, float scale, } std::cerr << "LoadGLTF() function is not yet implemented!" << std::endl; + + std::cout << "loaded glTF file has:\n" + << model.accessors.size() << " accessors\n" + << model.animations.size() << " animations\n" + << model.buffers.size() << " buffers\n" + << model.bufferViews.size() << " bufferViews\n" + << model.materials.size() << " materials\n" + << model.meshes.size() << " meshes\n" + << model.nodes.size() << " nodes\n" + << model.textures.size() << " textures\n" + << model.images.size() << " images\n" + << model.skins.size() << " skins\n" + << model.samplers.size() << " samplers\n" + << model.cameras.size() << " cameras\n" + << model.scenes.size() << " scenes\n" + << model.lights.size() << " lights\n"; + + for (const auto &gltfMesh : model.meshes) { + std::cout << "Current mesh has " << gltfMesh.primitives.size() + << " primitives:\n"; + for (const auto &meshPrimitive : gltfMesh.primitives) { + switch (meshPrimitive.mode) { + case TINYGLTF_MODE_TRIANGLES: // this is the simpliest case to handle + std::cout << "Will load a plain old list of trianges\n"; + break; + + // Other trigangle based modes + case TINYGLTF_MODE_TRIANGLE_FAN: + case TINYGLTF_MODE_TRIANGLE_STRIP: + default: + std::cerr << "primitive mode not implemented"; + break; + + // These aren't triangles: + case TINYGLTF_MODE_POINTS: + case TINYGLTF_MODE_LINE: + case TINYGLTF_MODE_LINE_LOOP: + std::cerr << "primitive is not triangle based, ignoring"; + } + } + } + return false; } diff --git a/examples/raytrace/main.cc b/examples/raytrace/main.cc index 37b8af6..5e17a8d 100644 --- a/examples/raytrace/main.cc +++ b/examples/raytrace/main.cc @@ -765,6 +765,15 @@ int main(int argc, char **argv) { gScene.AddNode(node); } } + + if (!gRenderConfig.gltf_filename.empty()) { + std::cout << "Found gltf file : " << gRenderConfig.gltf_filename << "\n"; + + bool ret = + LoadGLTF(gRenderConfig.gltf_filename, gRenderConfig.scene_scale, + &meshes, &materials, &textures); + } + if (!gScene.Commit()) { std::cerr << "Failed to commit the scene." << std::endl; return -1;