private void LoadChannel(glTFLoader.Schema.AnimationChannel channel, glTFLoader.Schema.AnimationSampler[] samplers, AnimationClip clip) { var target = channel.Target; var node = data.cache.nodes[target.Node.Value]; var relativePath = GetNodeRelativePath(node.transform, root.transform); var sampler = samplers[channel.Sampler]; var input = accessorLoader.LoadAccessor(sampler.Input); var output = accessorLoader.LoadAccessor(sampler.Output); switch (target.Path) { case glTFLoader.Schema.AnimationChannelTarget.PathEnum.translation: LoadTranslation(input, output, clip, relativePath); break; case glTFLoader.Schema.AnimationChannelTarget.PathEnum.rotation: LoadRotation(input, output, clip, relativePath); break; case glTFLoader.Schema.AnimationChannelTarget.PathEnum.scale: LoadScale(input, output, clip, relativePath); break; case glTFLoader.Schema.AnimationChannelTarget.PathEnum.weights: LoadWeights(input, output, clip, relativePath); break; default: break; } }
private void LoadMeshAttribute(GltfMesh mesh, string attributeName, int accessorIndex) { var arr = accessorLoader.LoadAccessor(accessorIndex); switch (attributeName) { case "POSITION": { var vertices = (Vector3[])arr; CoordinateSystemConverter.Convert(vertices); mesh.vertices = vertices; break; } case "NORMAL": { var normals = (Vector3[])arr; CoordinateSystemConverter.Convert(normals); mesh.normals = normals; break; } case "TANGENT": { var tangents = (Vector4[])arr; CoordinateSystemConverter.Convert(tangents); mesh.tangents = tangents; break; } case "TEXCOORD_0": { var texCoords = (Vector2[])arr; CoordinateSystemConverter.FlipTexCoords(texCoords); mesh.texCoords = texCoords; break; } case "COLOR_0": { var colors = (Vector4[])arr; mesh.colors = TypeConverter.ConvertColors(colors); break; } case "INDEX": { var indices = new int[arr.Length]; for (int i = 0; i < arr.Length; i++) { indices[i] = Convert.ToInt32(arr.GetValue(i)); } CoordinateSystemConverter.FlipIndices(indices); mesh.indices = indices; break; } case "JOINTS_0": mesh.joints = (Vector4[])arr; break; case "WEIGHTS_0": mesh.weights = (Vector4[])arr; break; default: Debug.LogWarning($"Invalid accessor name ({attributeName})"); break; } }