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