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) <ybalrid@ybalrid.info>
This commit is contained in:
Arthur Brainville (Ybalrid) 2018-02-19 14:30:28 +01:00
parent e42ba4e404
commit b8040e2a19
No known key found for this signature in database
GPG Key ID: BC05C4812A06BCF3
3 changed files with 74 additions and 9 deletions

View File

@ -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
}

View File

@ -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;
}

View File

@ -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;