Exemple #1
0
        /// <summary>
        /// Builds geometry.
        /// </summary>
        /// <param name="mesh"></param>
        /// <param name="builder"></param>
        /// <param name="settings"></param>
        public static void Build(
            Mesh mesh,
            IGeometryBuilder builder,
            GeometryBuilderSettings settings)
        {
            if (null == mesh || null == builder || null == settings)
            {
                return;
            }

            // begin flow
            builder.Start(mesh, settings);

            // create buffers
            int[]     triangles = null;
            Vector3[] vertices  = null;
            Vector2[] uvs       = null;
            Vector2[] uv1s      = null;
            Vector2[] uv2s      = null;
            Vector3[] normals   = null;
            Color[]   colors    = null;

            // must always have a layout
            builder.Layout(out vertices, out triangles);
            settings.Vertex.Transform(ref vertices, ref triangles);

            // fill other buffers
            if (settings.UV.Enabled)
            {
                builder.UV(out uvs, settings.UV);
                settings.UV.Transform(ref uvs);
            }

            if (settings.UV1.Enabled)
            {
                builder.UV(out uv1s, settings.UV1);
                settings.UV1.Transform(ref uv1s);
            }

            if (settings.UV2.Enabled)
            {
                builder.UV(out uv2s, settings.UV2);
                settings.UV2.Transform(ref uv2s);
            }

            if (settings.Color.Enabled)
            {
                builder.Colors(out colors);
                settings.Color.Transform(ref colors);
            }

            if (settings.Normals.Enabled)
            {
                builder.Normals(out normals);
                settings.Normals.Transform(ref normals);
            }

            // set buffers, layout first
            mesh.SetLayout(ref vertices, ref triangles);
            mesh.uv      = uvs;
            mesh.uv2     = uv1s;
            mesh.uv2     = uv2s;
            mesh.colors  = colors;
            mesh.normals = normals;
        }