function &sphereScene($level, &$center, $radius) { $sphere = new Sphere($center, $radius); if ($level == 1) { return $sphere; } else { $scene = new Group(new Sphere($center, 3.0 * $radius)); $scene->add($sphere); $rn = 3.0 * $radius / sqrt(12.0); for ($dz = -1; $dz <= 1; $dz += 2) { for ($dx = -1; $dx <= 1; $dx += 2) { $c2 = newVector($center[0] - $dx * $rn, $center[1] + $rn, $center[2] - $dz * $rn); $scene->add(Scene::sphereScene($level - 1, $c2, $radius / 2.0)); } } return $scene; } }