Ejemplo n.º 1
0
        /// Collect and bind geometry from stream
        public void Bind(UnityEngine.Mesh mesh)
        {
            var vertices = new List<Vector3>();
            var triangles = new List<int>();
            var uv = useUV ? new List<Vector2>() : null;
            var color = useColor ? new List<Color32>() : null;
            var normals = useUV ? new List<Vector3>() : null;

            // Collect
            foreach (var gp in geometry.Geometry)
            {
                gp.VertexOffset = vertices.Count;
                vertices.AddRange(gp.Vertices);
                triangles.AddRange(gp.Triangles);
                if (uv != null) { uv.AddRange(gp.UV); }
                if (color != null) { color.AddRange(gp.Color); }
                if (normals != null) { normals.AddRange(gp.Normals); }
            }

            // Attach
            mesh.Clear();
            mesh.vertices = vertices.ToArray();
            mesh.triangles = triangles.ToArray();
            if (useUV) { mesh.uv = uv.ToArray(); }
            if (useColor) { mesh.colors32 = color.ToArray(); }
            if (useNormals) { mesh.normals = normals.ToArray(); }

            // Bind
            if (!useNormals) { mesh.RecalculateNormals(); }
            mesh.RecalculateBounds();
            mesh.Optimize();

            // Summary
            vertexGen = vertices.Count;
            triangleGen = triangles.Count;
        }