コード例 #1
0
ファイル: MeshAdapter.cs プロジェクト: vrm-c/UniVRM_1_0
        static Mesh FromGltf(Vrm10Storage storage, VrmProtobuf.Mesh x, VrmProtobuf.MeshPrimitive primitive, bool isShared)
        {
            var mesh = new Mesh((TopologyType)primitive.Mode.GetValueOrDefault())
            {
                VertexBuffer = primitive.Attributes.FromGltf(storage)
            };

            if (isShared)
            {
                // create joined index buffer
                mesh.IndexBuffer = storage.CreateAccessor(x.Primitives.Select(y => y.Indices.Value).ToArray());
            }
            else
            {
                mesh.IndexBuffer = storage.CreateAccessor(primitive.Indices.Value);
            }

            {
                for (int i = 0; i < primitive.Targets.Count; ++i)
                {
                    var    gltfTarget = primitive.Targets[i];
                    string targetName = null;
                    if (primitive.Extras != null &&
                        primitive.Extras.TargetNames != null &&
                        i < primitive.Extras.TargetNames.Count
                        )
                    {
                        targetName = primitive.Extras.TargetNames[i];
                    }
                    var target = new MorphTarget(targetName)
                    {
                        VertexBuffer = gltfTarget.FromGltf(storage)
                    };

                    // validate count
                    foreach (var kv in target.VertexBuffer)
                    {
                        if (kv.Value.Count != mesh.VertexBuffer.Count)
                        {
                            throw new Exception();
                        }
                    }

                    mesh.MorphTargets.Add(target);
                }
            }

            return(mesh);
        }
コード例 #2
0
ファイル: MeshAdapter.cs プロジェクト: vrm-c/UniVRM_1_0
        public static VertexBuffer FromGltf(this global::Google.Protobuf.Collections.MapField <string, int> attributes,
                                            Vrm10Storage storage)
        {
            var b = new VertexBuffer();

            foreach (var kv in attributes)
            {
                var accessor = storage.CreateAccessor(kv.Value);
                b.Add(kv.Key, accessor);
            }
            return(b);
        }