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));
            }
        }
示例#2
0
文件: Icosphere.cs 项目: keijiro/VJ05
        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;
        }
        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;
        }