Ejemplo n.º 1
0
        public void AddToSurface(IndexedSurface <WallVertex> surface, Vector2 offset)
        {
            var vertices = new WallVertex[this.vertices.Length];

            for (int i = 0; i < this.vertices.Length; i++)
            {
                vertices[i] = new WallVertex(new Vector3(this.vertices[i] + offset), Vector3.UnitZ);
            }

            var id = surface.AddVertices(vertices);

            var indices = new ushort[this.triangles.Length * 3];

            int j = 0;

            for (int i = 0; i < this.triangles.Length; i++)
            {
                var triangle = this.triangles[i];
                indices[j++] = (ushort)(triangle.Id0 + id);
                indices[j++] = (ushort)(triangle.Id1 + id);
                indices[j++] = (ushort)(triangle.Id2 + id);
            }

            surface.AddIndices(indices);
        }
Ejemplo n.º 2
0
        public IndexedSurface <TVertexData> ToIndexedSurface <TVertexData>(
            Func <Face.VertexIds, TVertexData> makeVertex)
            where TVertexData : struct, IVertexData
        {
            var surface = new IndexedSurface <TVertexData> {
                ClearOnRender = false
            };

            foreach (var face in this.faces)
            {
                ushort v0 = surface.AddVertex(makeVertex(face.Ids[0]));
                ushort v1 = surface.AddVertex(makeVertex(face.Ids[1]));
                for (int i = 2; i < face.Ids.Count; i++)
                {
                    ushort v2 = surface.AddVertex(makeVertex(face.Ids[i]));

                    surface.AddIndices(v0, v1, v2);

                    v1 = v2;
                }
            }

            surface.IsStatic = true;

            return(surface);
        }