/*! * The number of triangle recursions in this chunk. * * @param a - Top * @param b - Bottom Right * @param c - Bottom Left */ private void SubdivideFace(int _top, int _bottomRight, int _bottomLeft, int n) { vertices.Add(SphereUtils.GetMidPointVertex(vertices[_top], vertices[_bottomRight])); vertices.Add(SphereUtils.GetMidPointVertex(vertices[_bottomRight], vertices[_bottomLeft])); vertices.Add(SphereUtils.GetMidPointVertex(vertices[_bottomLeft], vertices[_top])); var middleRight = vertices.Count - 3; var middleBottom = vertices.Count - 2; var middleLeft = vertices.Count - 1; // Only draw the last recursion if (n == 1) { triangles.AddRange(new List <int> { _top, middleRight, middleLeft }); // Upper Top triangles.AddRange(new List <int> { middleLeft, middleBottom, _bottomLeft }); // Lower Left triangles.AddRange(new List <int> { middleBottom, middleLeft, middleRight }); // Lower Mid triangles.AddRange(new List <int> { middleRight, _bottomRight, middleBottom }); // Lower Right return; } SubdivideFace(_top, middleRight, middleLeft, n - 1); SubdivideFace(middleLeft, middleBottom, _bottomLeft, n - 1); SubdivideFace(middleBottom, middleLeft, middleRight, n - 1); SubdivideFace(middleRight, _bottomRight, middleBottom, n - 1); }
/*! * The number of chunk recursions per base face. */ private void GenerateChunks(List <Vector3> _vertices, int n) { _vertices.Add(SphereUtils.GetMidPointVertex(_vertices[0], _vertices[1])); // Right Middle (3) _vertices.Add(SphereUtils.GetMidPointVertex(_vertices[1], _vertices[2])); // Bottom Middle (4) _vertices.Add(SphereUtils.GetMidPointVertex(_vertices[2], _vertices[0])); // Left middle (5) // Only draw the last recursion if (n == 1) { GenerateChunk(new List <Vector3> { _vertices[0], _vertices[3], _vertices[5] }); // Top GenerateChunk(new List <Vector3> { _vertices[5], _vertices[4], _vertices[2] }); // Bottom Left GenerateChunk(new List <Vector3> { _vertices[4], _vertices[5], _vertices[3] }); // Bottom Middle GenerateChunk(new List <Vector3> { _vertices[3], _vertices[1], _vertices[4] }); // Bottom Right return; } GenerateChunks(new List <Vector3> { _vertices[0], _vertices[3], _vertices[5] }, n - 1); // Top GenerateChunks(new List <Vector3> { _vertices[5], _vertices[4], _vertices[2] }, n - 1); // Bottom Left GenerateChunks(new List <Vector3> { _vertices[4], _vertices[5], _vertices[3] }, n - 1); // Bottom Middle GenerateChunks(new List <Vector3> { _vertices[3], _vertices[1], _vertices[4] }, n - 1); // Bottom Right }