public static string ToJson(this glTFSkin self) { var f = new JsonFormatter(); GltfSerializer.Serialize_gltf_skins_ITEM(f, self); return(f.ToString()); }
public void ExportNodes(Node root, List <Node> nodes, List <MeshGroup> groups, ExportArgs option) { foreach (var x in nodes) { var node = new glTFNode { name = x.Name, }; node.translation = x.LocalTranslation.ToFloat3(); node.rotation = x.LocalRotation.ToFloat4(); node.scale = x.LocalScaling.ToFloat3(); if (x.MeshGroup != null) { node.mesh = groups.IndexOfThrow(x.MeshGroup); var skin = x.MeshGroup.Skin; if (skin != null) { var skinIndex = Storage.Gltf.skins.Count; var gltfSkin = new glTFSkin() { joints = skin.Joints.Select(joint => nodes.IndexOfThrow(joint)).ToArray() }; if (skin.InverseMatrices == null) { skin.CalcInverseMatrices(); } if (skin.InverseMatrices != null) { gltfSkin.inverseBindMatrices = skin.InverseMatrices.AddAccessorTo(Storage, 0, option.sparse); } if (skin.Root != null) { gltfSkin.skeleton = nodes.IndexOf(skin.Root); } Storage.Gltf.skins.Add(gltfSkin); node.skin = skinIndex; } } node.children = x.Children.Select(child => nodes.IndexOfThrow(child)).ToArray(); Storage.Gltf.nodes.Add(node); } Storage.Gltf.scenes.Add(new gltfScene() { nodes = root.Children.Select(child => nodes.IndexOfThrow(child)).ToArray() }); }
public static IEnumerable <(glTFNode, glTFSkin)> ExportNodes(INativeArrayManager arrayManager, List <Node> nodes, List <MeshGroup> groups, ExportingGltfData data, ExportArgs option) { foreach (var node in nodes) { var gltfNode = new glTFNode { name = node.Name, }; glTFSkin gltfSkin = default; gltfNode.translation = node.LocalTranslation.ToFloat3(); gltfNode.rotation = node.LocalRotation.ToFloat4(); gltfNode.scale = node.LocalScaling.ToFloat3(); if (node.MeshGroup != null) { gltfNode.mesh = groups.IndexOfThrow(node.MeshGroup); var skin = node.MeshGroup.Skin; if (skin != null) { gltfSkin = new glTFSkin() { joints = skin.Joints.Select(joint => nodes.IndexOfThrow(joint)).ToArray() }; if (skin.InverseMatrices == null) { skin.CalcInverseMatrices(arrayManager); } if (skin.InverseMatrices != null) { gltfSkin.inverseBindMatrices = skin.InverseMatrices.AddAccessorTo(data, 0, option.sparse); } if (skin.Root != null) { gltfSkin.skeleton = nodes.IndexOf(skin.Root); } } } gltfNode.children = node.Children.Select(child => nodes.IndexOfThrow(child)).ToArray(); yield return(gltfNode, gltfSkin); } }