#!/usr/bin/env perl
use strict;
use warnings;
use OpenGL::Simple qw(:all);
use OpenGL::Simple::GLUT qw(:all);
use OpenGL::Simple::Viewer;

my ($slices,$stacks)=(32,32);

glutInit;

my $v = new OpenGL::Simple::Viewer(
        draw_geometry => sub { 

                drawSphere(0,0,0, 1.0, [1,1,1]);

                my $S1P = 0.732051;
                my $S1R = 0.267949;
                my $S1C = [ 0.5, 1.0, 0.5 ];

                drawSphere(-$S1P, $S1P, $S1P,$S1R,$S1C);
                drawSphere(-$S1P, $S1P, -$S1P,$S1R,$S1C);
                drawSphere(-$S1P, -$S1P, $S1P,$S1R,$S1C);
                drawSphere(-$S1P, -$S1P, -$S1P,$S1R,$S1C);
                drawSphere($S1P, -$S1P, $S1P,$S1R,$S1C);
                drawSphere($S1P, -$S1P, -$S1P,$S1R,$S1C);
                drawSphere($S1P, $S1P, $S1P,$S1R,$S1C);
                drawSphere($S1P, $S1P, -$S1P,$S1R,$S1C);

                my $S2X = 0.29215776558 ;
                my $S2Y = 0.81329768066 ;
                my $S2R = 0.18670231934 ;
                my $S2C = [1.0, 1.0, 0.5]; 

                drawSphere($S2X, $S2Y, $S2Y, $S2R,$S2C); 
                drawSphere($S2Y, $S2X, $S2Y, $S2R,$S2C); 
                drawSphere($S2Y, $S2Y, $S2X, $S2R,$S2C); 
                drawSphere(-$S2X, $S2Y, $S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, $S2X, $S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, $S2Y, $S2X, $S2R,$S2C); 
                drawSphere($S2X, -$S2Y, $S2Y, $S2R,$S2C); 
                drawSphere($S2Y, -$S2X, $S2Y, $S2R,$S2C); 
                drawSphere($S2Y, -$S2Y, $S2X, $S2R,$S2C); 
                drawSphere(-$S2X, -$S2Y, $S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, -$S2X, $S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, -$S2Y, $S2X, $S2R,$S2C); 
                drawSphere($S2X, $S2Y, -$S2Y, $S2R,$S2C); 
                drawSphere($S2Y, $S2X, -$S2Y, $S2R,$S2C); 
                drawSphere($S2Y, $S2Y, -$S2X, $S2R,$S2C); 
                drawSphere(-$S2X, $S2Y, -$S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, $S2X, -$S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, $S2Y, -$S2X, $S2R,$S2C); 
                drawSphere($S2X, -$S2Y, -$S2Y, $S2R,$S2C); 
                drawSphere($S2Y, -$S2X, -$S2Y, $S2R,$S2C); 
                drawSphere($S2Y, -$S2Y, -$S2X, $S2R,$S2C); 
                drawSphere(-$S2X, -$S2Y, -$S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, -$S2X, -$S2Y, $S2R,$S2C); 
                drawSphere(-$S2Y, -$S2Y, -$S2X, $S2R,$S2C); 


                glColor(0,1,0);
                glutWireCube(2.0);

        },
);

glLineWidth(3.0);

glutMainLoop;

exit;

sub drawSphere {
        my ($x,$y,$z,$r,$c) = @_;
        glPushMatrix;
                glTranslate($x,$y,$z);
                glColor(@$c);
                glutSolidSphere($r,$slices,$stacks);
        glPopMatrix;
}



