public IcosphereBuilder(IcosphereBuilder source) { _vertices.AddRange(source._vertices); var midPoints = new MidpointTable(_vertices); foreach (var t in source._triangles) { var m1 = midPoints.GetMidpoint(t.i1, t.i2); var m2 = midPoints.GetMidpoint(t.i2, t.i3); var m3 = midPoints.GetMidpoint(t.i3, t.i1); _triangles.Add((t.i1, m1, m3)); _triangles.Add((m1, t.i2, m2)); _triangles.Add((m3, m2, t.i3)); _triangles.Add((m1, m2, m3)); } }
public void Subdivide() { var vc = new VertexCache(); vc.vertices.AddRange(vertexCache.vertices); var midPoints = new MidpointTable(vc); foreach (var t in vertexCache.triangles) { var m1 = midPoints.GetMidpoint(t.i1, t.i2); var m2 = midPoints.GetMidpoint(t.i2, t.i3); var m3 = midPoints.GetMidpoint(t.i3, t.i1); vc.AddTriangle(t.i1, m1, m3); vc.AddTriangle(m1, t.i2, m2); vc.AddTriangle(m3, m2, t.i3); vc.AddTriangle(m1, m2, m3); } vertexCache = vc; }