diff --git a/models/regression/unassigned-skeleton.gltf b/models/regression/unassigned-skeleton.gltf new file mode 100644 index 0000000..6a977e5 --- /dev/null +++ b/models/regression/unassigned-skeleton.gltf @@ -0,0 +1,267 @@ +{ + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 3, + "type": "MAT4" + }, + { + "bufferView": 1, + "componentType": 5125, + "count": 24, + "type": "SCALAR" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 10, + "max": [ + 0.5, + 2.0, + 0.0 + ], + "min": [ + -0.5, + 0.0, + 0.0 + ], + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 24, + "componentType": 5126, + "count": 10, + "type": "VEC4" + }, + { + "bufferView": 4, + "byteOffset": 40, + "componentType": 5126, + "count": 10, + "type": "VEC2" + }, + { + "bufferView": 5, + "byteOffset": 12, + "componentType": 5126, + "count": 10, + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 48, + "componentType": 5123, + "count": 10, + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 56, + "componentType": 5126, + "count": 10, + "type": "VEC4" + }, + { + "bufferView": 8, + "componentType": 5126, + "count": 165, + "max": [ + 5.466667175292969 + ], + "min": [ + 0.0 + ], + "type": "SCALAR" + }, + { + "bufferView": 8, + "byteOffset": 4, + "componentType": 5126, + "count": 165, + "type": "VEC4" + }, + { + "bufferView": 8, + "byteOffset": 20, + "componentType": 5126, + "count": 165, + "type": "VEC3" + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 1, + "target": { + "node": 2, + "path": "scale" + } + } + ], + "samplers": [ + { + "input": 8, + "interpolation": "LINEAR", + "output": 9 + }, + { + "input": 8, + "interpolation": "LINEAR", + "output": 10 + } + ] + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 192 + }, + { + "buffer": 1, + "byteLength": 96, + "target": 34963 + }, + { + "buffer": 2, + "byteLength": 720, + "byteStride": 72, + "target": 34962 + }, + { + "buffer": 2, + "byteLength": 720, + "byteStride": 72, + "target": 34962 + }, + { + "buffer": 2, + "byteLength": 720, + "byteStride": 72, + "target": 34962 + }, + { + "buffer": 2, + "byteLength": 720, + "byteStride": 72, + "target": 34962 + }, + { + "buffer": 2, + "byteLength": 720, + "byteStride": 72, + "target": 34962 + }, + { + "buffer": 2, + "byteLength": 720, + "byteStride": 72, + "target": 34962 + }, + { + "buffer": 3, + "byteLength": 5280, + "byteStride": 32, + "target": 34962 + } + ], + "buffers": [ + { + "byteLength": 192, + "name": "SkinBuffer", + "uri": "data:application/octet-stream;base64,AAAAAAAAAABBkoddQQUAgEMAOgAvAFAAcgBvAGoAZQBjAHQAcwAvAHMAdgBtADEAXwBkAGEAdABhAC8AZwBsAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAIA/" + }, + { + "byteLength": 96, + "name": "IndexBuffer", + "uri": "data:application/octet-stream;base64,AAAAAAEAAAADAAAAAAAAAAMAAAACAAAAAgAAAAMAAAAFAAAAAgAAAAUAAAAEAAAABAAAAAUAAAAHAAAABAAAAAcAAAAGAAAABgAAAAcAAAAJAAAABgAAAAkAAAAIAAAA" + }, + { + "byteLength": 720, + "name": "VertexBuffer", + "uri": "data:application/octet-stream;base64,AAAAvwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAvwAAAD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAEA/AACAPgAAAAAAAAAAAAAAPwAAAD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAEA/AACAPgAAAAAAAAAAAAAAvwAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAAA/AAAAPwAAAAAAAAAAAAAAPwAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAAA/AAAAPwAAAAAAAAAAAAAAvwAAwD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAIA+AABAPwAAAAAAAAAAAAAAPwAAwD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAQACAAAAAAAAAIA+AABAPwAAAAAAAAAAAAAAvwAAAEAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAACAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAPwAAAEAAAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAACAAAAAAAAAAAAAACAPwAAAAAAAAAA" + }, + { + "byteLength": 5280, + "uri": "data:application/octet-stream;base64,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" + } + ], + "meshes": [ + { + "name": "mesh_0", + "primitives": [ + { + "attributes": { + "COLOR_0": 3, + "JOINTS_0": 6, + "NORMAL": 5, + "POSITION": 2, + "TEXCOORD_0": 4, + "WEIGHTS_0": 7 + }, + "indices": 1, + "mode": 4 + } + ] + } + ], + "nodes": [ + { + "mesh": 0, + "name": "mesh_0", + "skin": 0 + }, + { + "children": [ + 2 + ], + "name": "bone_1", + "translation": [ + 0.0, + 1.0, + 0.0 + ] + }, + { + "name": "bone_2" + }, + { + "name": "bone_3" + } + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0, + 1, + 3 + ] + } + ], + "skins": [ + { + "inverseBindMatrices": 0, + "joints": [ + 3, + 1, + 2 + ], + "name": "mesh_0", + "0skeleton": -1 + } + ] +} diff --git a/tests/tester.cc b/tests/tester.cc index 0b617b2..c8acf43 100644 --- a/tests/tester.cc +++ b/tests/tester.cc @@ -436,6 +436,36 @@ TEST_CASE("serialize-empty-material", "[issue-294]") { } +TEST_CASE("empty-skeleton-id", "[issue-321]") { + + tinygltf::Model model; + tinygltf::TinyGLTF ctx; + std::string err; + std::string warn; + + bool ret = ctx.LoadASCIIFromFile(&model, &err, &warn, "../models/regression/unassigned-skeleton.gltf"); + if (!err.empty()) { + std::cerr << err << std::endl; + } + REQUIRE(true == ret); + + REQUIRE(model.skins.size() == 1); + REQUIRE(model.skins[0].skeleton == -1); // unassigned + + std::stringstream os; + + ctx.WriteGltfSceneToStream(&model, os, false, false); + + // use nlohmann json + nlohmann::json j = nlohmann::json::parse(os.str()); + + // Ensure `skeleton` property is not written to .gltf(was serialized as -1) + REQUIRE(1 == j["skins"].size()); + REQUIRE(j["skins"][0].is_object()); + REQUIRE(j["skins"][0].count("skeleton") == 0); + +} + #ifndef TINYGLTF_NO_FS TEST_CASE("expandpath-utf-8", "[pr-226]") {