private static BeginMode GetBeginMode(ExplicitModelPrimitiveTopology primitiveTopology)
        {
            switch (primitiveTopology)
            {
            case ExplicitModelPrimitiveTopology.PointList: return(BeginMode.Points);

            case ExplicitModelPrimitiveTopology.LineList: return(BeginMode.Lines);

            case ExplicitModelPrimitiveTopology.LineStrip: return(BeginMode.LineStrip);

            case ExplicitModelPrimitiveTopology.TriangleList: return(BeginMode.Triangles);

            case ExplicitModelPrimitiveTopology.TriangleStrip: return(BeginMode.TriangleStrip);

            default: throw new ArgumentOutOfRangeException(nameof(primitiveTopology), primitiveTopology, null);
            }
        }
示例#2
0
        public static IExplicitModel FromVertices(IReadOnlyList <VertexPosTanNormTex> vertices, IReadOnlyList <int> indices, ExplicitModelPrimitiveTopology topology)
        {
            var positions = vertices.Select(x => x.Position).ToArray();
            var model     = new ExplicitModel(ResourceVolatility.Immutable)
            {
                Positions = positions,
                Tangents  = vertices.Select(x => x.Tangent).ToArray(),
                Normals   = vertices.Select(x => x.Normal).ToArray(),
                TexCoords = vertices.Select(x => x.TexCoord).ToArray(),

                Indices        = indices?.ToArray() ?? Enumerable.Range(0, positions.Length).ToArray(),
                IndexSubranges = new [] { new ExplicitModelIndexSubrange(0, indices?.Count ?? vertices.Count) },
                Topology       = topology,
            };

            model.RecalculateInfo();
            model.Validate();
            return(model);
        }