The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use blib;
use Carp;

$SIG{__DIE__} = sub {die Carp::longmess(@_);};

use PDL;

#$PDL::Graphics::TriD::verbose=1;

use PDL::Graphics::TriD;

use PDL::Graphics::TriD::Image;
use PDL::IO::Pic;
use PDL::Graphics::TriD::GoBoard;



# Calculate some random function


print "START\n";

sub snap {
	if(1) {return}
	my $ppdl = grabpic3d();
	print "GOT PICTURE!\n";
	wpic $ppdl,"$_[0].jpg";
	system("xv $_[0].jpg");
}

$gob = pdl [
[
	[1,	0,	0,	0],
	[0,	1,	0,	0],
	[0,	0,	1,	0],
	[0,	0,	0,	1],
],
[
	[0.5,	0.5,	0,	0],
	[0.5,	0,	0.5,	0],
	[0.5,	0,	0,	0.5],
	[0,	0,	0.5,	0.5],
],
[
	[0.33,	0.33,	0.33,	0],
	[0.33,	0.33,	0,	0.33],
	[0.33,	0,	0.33,	0.33],
	[0,	0.33,	0.33,	0.33],
],
[
	[0.25,	0.25,	0.25,	0.25],
	[0.25,	0.25,	0.25,	0.25],
	[0.25,	0.25,	0.25,	0.25],
	[0.25,	0.25,	0.25,	0.25],
]
];

$gob2 = $gob->slice(":,1:2,1:2");
$gob3 = $gob->slice(":,2:3,2:3");

$b = new PDL::Graphics::TriD::GoBoard({Data => $gob});
$b->add_inlay($gob2,1,1,0.25);
$b->add_inlay($gob3,2,2,0.5);

if(1) {
$win = PDL::Graphics::TriD::get_current_window();
$win->clear_objects();
$win->add_object($b);
$win->twiddle();
}

snap "pic0";

# $f = zeroes(10,10);

# $foo = cos(xvals($f)/1.5) * cos(yvals($f)/1.5)/2;
$t =  xvals zeroes 30,30;
$u =  yvals zeroes 30,30;

$x = sin($u*0.5 + $t * 0.1)/2+0.5;
$y = cos($u*0.3 + $t * 0.27)/2+0.5;
$z = cos($u*0.1 + $t * 0.56)/2+0.5;

PDL::Graphics::TriD::imagrgb([$x,$y,$z]);
snap "pic1.1";

$x .= $t / 30;
$y .= $u / 30;
$z .= 0.5*($t + $u)/30;

$r = zeroes(4,4,4,4)+0.1;
$g = zeroes(4,4,4,4);
$b = zeroes(4,4,4,4);

($tmp = $r->slice(":,:,2,2")) .= 1;
($tmp = $r->slice(":,:,:,1")) .= 0.5;
($tmp = $g->slice("2,:,1,2")) .= 1;
($tmp = $b->slice("2,3,1,:")) .= 1;

$t = 0.1 * xvals zeroes 300;

$x = sin($t * 0.1)/2+0.5;
$y = cos($t * 0.27)/2+0.5;
$z = cos($t * 0.56)/2+0.5;

line3d([$x,$y,$z],[$x,1-$x,0]);
snap "pic4";

 $f = zeroes(3,3);
$foo = ((xvals $f) - 2) ** 2 + ((yvals $f) -2) ** 2;

print $foo;

print "TOIMAG\n";

PDL::Graphics::TriD::imag3d([$foo]);	# Use default values to make a 3D plot.
		# Stops here for rotating until user presses 'q'.
snap "pic5";

print "OUTOFIMAG\n";