/// <summary> /// Gets a unit sphere from the cache. /// </summary> /// <param name="subdivisions"> /// The number of subdivisions. /// </param> /// <returns> /// A unit sphere mesh. /// </returns> private static MeshGeometry3D GetUnitSphere(int subdivisions) { if (UnitSphereCache.ContainsKey(subdivisions)) { return UnitSphereCache[subdivisions]; } var mb = new MeshBuilder(false, false); mb.AddRegularIcosahedron(new Vector3(), 1, false); for (int i = 0; i < subdivisions; i++) { mb.SubdivideLinear(); } for (int i = 0; i < mb.positions.Count; i++) { var v = mb.positions[i]; v.Normalize(); mb.positions[i] = v; } var mesh = mb.ToMeshGeometry3D(); UnitSphereCache[subdivisions] = mesh; return mesh; }