Esempio n. 1
0
            // Returns a midpoint with retrieving an existing vertex or adding a new one.
            public int GetMidpoint(int i1, int i2)
            {
                var key = IndexPairToKey(i1, i2);

                if (_table.ContainsKey(key))
                {
                    return(_table[key]);
                }
                var mid = (_vc.vertices[i1] + _vc.vertices[i2]) * 0.5f;
                var i   = _vc.AddVertex(mid.normalized);

                _table[key] = i;
                return(i);
            }
            // Get the midpoint of the pair of indices.
            public int GetMidpoint(int i1, int i2)
            {
                var key = IndexPairToKey(i1, i2);

                // return from the table
                if (table.ContainsKey(key))
                {
                    return(table[key]);
                }
                // add a new entry to the table
                var mid = (vertexCache.vertices[i1] + vertexCache.vertices[i2]) * 0.5f;
                var i   = vertexCache.AddVertex(mid.normalized);

                table[key] = i;
                return(i);
            }
        public IcosphereBuilder()
        {
            var t = (1 + Mathf.Sqrt(5)) / 2;

            vertexCache = new VertexCache();

            vertexCache.AddVertex(new Vector3(-1, +t, 0).normalized);
            vertexCache.AddVertex(new Vector3(+1, +t, 0).normalized);
            vertexCache.AddVertex(new Vector3(-1, -t, 0).normalized);
            vertexCache.AddVertex(new Vector3(+1, -t, 0).normalized);

            vertexCache.AddVertex(new Vector3(0, -1, +t).normalized);
            vertexCache.AddVertex(new Vector3(0, +1, +t).normalized);
            vertexCache.AddVertex(new Vector3(0, -1, -t).normalized);
            vertexCache.AddVertex(new Vector3(0, +1, -t).normalized);

            vertexCache.AddVertex(new Vector3(+t, 0, -1).normalized);
            vertexCache.AddVertex(new Vector3(+t, 0, +1).normalized);
            vertexCache.AddVertex(new Vector3(-t, 0, -1).normalized);
            vertexCache.AddVertex(new Vector3(-t, 0, +1).normalized);

            vertexCache.AddTriangle(0, 11, 5);
            vertexCache.AddTriangle(0, 5, 1);
            vertexCache.AddTriangle(0, 1, 7);
            vertexCache.AddTriangle(0, 7, 10);
            vertexCache.AddTriangle(0, 10, 11);

            vertexCache.AddTriangle(1, 5, 9);
            vertexCache.AddTriangle(5, 11, 4);
            vertexCache.AddTriangle(11, 10, 2);
            vertexCache.AddTriangle(10, 7, 6);
            vertexCache.AddTriangle(7, 1, 8);

            vertexCache.AddTriangle(3, 9, 4);
            vertexCache.AddTriangle(3, 4, 2);
            vertexCache.AddTriangle(3, 2, 6);
            vertexCache.AddTriangle(3, 6, 8);
            vertexCache.AddTriangle(3, 8, 9);

            vertexCache.AddTriangle(4, 9, 5);
            vertexCache.AddTriangle(2, 4, 11);
            vertexCache.AddTriangle(6, 2, 10);
            vertexCache.AddTriangle(8, 6, 7);
            vertexCache.AddTriangle(9, 8, 1);
        }
Esempio n. 4
0
        public IcosphereBuilder()
        {
            var t = (Mathf.Sqrt(5) + 1) / 2;

            vertexCache = new VertexCache();

            vertexCache.AddVertex(new Vector3(-1, +t, 0).normalized);
            vertexCache.AddVertex(new Vector3(+1, +t, 0).normalized);
            vertexCache.AddVertex(new Vector3(-1, -t, 0).normalized);
            vertexCache.AddVertex(new Vector3(+1, -t, 0).normalized);

            vertexCache.AddVertex(new Vector3(0, -1, +t).normalized);
            vertexCache.AddVertex(new Vector3(0, +1, +t).normalized);
            vertexCache.AddVertex(new Vector3(0, -1, -t).normalized);
            vertexCache.AddVertex(new Vector3(0, +1, -t).normalized);

            vertexCache.AddVertex(new Vector3(+t, 0, -1).normalized);
            vertexCache.AddVertex(new Vector3(+t, 0, +1).normalized);
            vertexCache.AddVertex(new Vector3(-t, 0, -1).normalized);
            vertexCache.AddVertex(new Vector3(-t, 0, +1).normalized);

            vertexCache.AddTriangle(0, 11, 5);
            vertexCache.AddTriangle(0, 5, 1);
            vertexCache.AddTriangle(0, 1, 7);
            vertexCache.AddTriangle(0, 7, 10);
            vertexCache.AddTriangle(0, 10, 11);

            vertexCache.AddTriangle(1, 5, 9);
            vertexCache.AddTriangle(5, 11, 4);
            vertexCache.AddTriangle(11, 10, 2);
            vertexCache.AddTriangle(10, 7, 6);
            vertexCache.AddTriangle(7, 1, 8);

            vertexCache.AddTriangle(3, 9, 4);
            vertexCache.AddTriangle(3, 4, 2);
            vertexCache.AddTriangle(3, 2, 6);
            vertexCache.AddTriangle(3, 6, 8);
            vertexCache.AddTriangle(3, 8, 9);

            vertexCache.AddTriangle(4, 9, 5);
            vertexCache.AddTriangle(2, 4, 11);
            vertexCache.AddTriangle(6, 2, 10);
            vertexCache.AddTriangle(8, 6, 7);
            vertexCache.AddTriangle(9, 8, 1);
        }