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); }
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); }