SmallptGPU-v1.6/scene_build_complex.pl
2017-03-09 21:17:55 +00:00

60 lines
1.5 KiB
Perl

#!/usr/bin/perl
$maxDepth = 4.0;
sub PrintSphere {
my $depth = shift;
my $posx = shift;
my $posy = shift;
my $posz = shift;
my $rad = shift;
my $k = $depth / $maxDepth;
my $col1 = 0.75 * $k;
my $col2 = 0.75 * (1.0 - $k);
print "sphere $rad $posx $posy $posz 0 0 0 $col2 0 $col1 0\n";
}
sub HyperSphere {
my $depth = shift;
if ($depth <= $maxDepth) {
my $posx = shift;
my $posy = shift;
my $posz = shift;
my $rad = shift;
my $direction = shift;
PrintSphere($depth, $posx, $posy, $posz, $rad);
my $newRad = $rad / 2.0;
if ($direction != 0) {
HyperSphere($depth + 1.0, $posx - $rad - $newRad, $posy, $posz, $newRad, 1);
}
if ($direction != 1) {
HyperSphere($depth + 1.0, $posx + $rad + $newRad, $posy, $posz, $newRad, 0);
}
if ($direction != 2) {
HyperSphere($depth + 1.0, $posx, $posy - $rad - $newRad, $posz, $newRad, 3);
}
if ($direction != 3) {
HyperSphere($depth + 1.0, $posx, $posy + $rad + $newRad, $posz, $newRad, 2);
}
if ($direction != 4) {
HyperSphere($depth + 1.0, $posx, $posy, $posz - $rad - $newRad, $newRad, 5);
}
if ($direction != 5) {
HyperSphere($depth + 1.0, $posx, $posy, $posz + $rad + $newRad, $newRad, 4);
}
}
}
# Directions:
# 0 - from -x
# 1 - from +x
# 2 - from -y
# 3 - from +y
# 4 - from -z
# 5 - from +z
HyperSphere(0.0, 0.0, 0.0, 0.0, 15.0, 2);