private static MeshGeometry3D GetUnitSphere(int subdivisions)
{
if (UnitSphereCache.ContainsKey(subdivisions))
{
return UnitSphereCache[subdivisions];
}
var mb = new MeshBuilder(false, false);
mb.AddRegularIcosahedron(new Point3D(), 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].ToVector3D();
v.Normalize();
mb.Positions[i] = v.ToPoint3D();
}
var mesh = mb.ToMesh();
UnitSphereCache[subdivisions] = mesh;
return mesh;
}