#!/usr/bin/perl -w use RenderMan; sub rgb2hsv { my ($r, $g, $b) = @_; my ($min, $max, $delta, $h, $s, $v); $min=min($r, $g, $b); $max=max($r, $g, $b); $v=$max; $delta=$max-$min; if ($delta == 0) { $s=0; $h=-1; # undefined, so what... } else { $s=$delta/$max; if ($r == $max) { $h = ($g - $b)/$delta; } elsif ($g == $max) { $h = 2 + ($b - $r)/$delta; } else { $h = 4 + ($r - $g)/$delta; } $h *= 60; $h += 360 if $h < 0; } return ($h, $s, $v); } sub hsv2rgb { my ($h, $s, $v) = @_; my ($i, $f, $p, $q, $t); if ($s == 0) { $r = $b = $g = $v; } else { $h /= 60; $i = int $h; $f = $h - $i; $p = $v * (1 - $s); $q = $v * (1 - $s * $f); $t = $v * (1 - $s * (1 - $f)); SWITCH: { if ($i == 0) { $r = $v; $g = $t; $b = $p; last SWITCH; } if ($i == 1) { $r = $q; $g = $v; $b = $p; last SWITCH; } if ($i == 2) { $r = $p; $g = $v; $b = $t; last SWITCH; } if ($i == 3) { $r = $p; $g = $q; $b = $v; last SWITCH; } if ($i == 4) { $r = $t; $g = $p; $b = $v; last SWITCH; } $r = $v; $g = $p; $b = $q; } } return ($r, $g, $b); } sub min { my ($i, $m); $m=$_[0]; for ($i=1; $i <= $#_; $i++) { $m = $_[$i] if ($m > $_[$i]); } return $m; } sub max { my ($i, $m); $m=$_[0]; for ($i=1; $i <= $#_; $i++) { $m=$_[$i] if ($m < $_[$i]); } return $m; } Begin(); for ($fr=1; $fr<=181; $fr++) { $fn = sprintf ("%02d", $fr); FrameBegin($fr); Display("rgb216-".$fn.".tif", "file", "rgb"); Format(300, 300, 1); LightSource(RI_DISTANTLIGHT, { "intensity" => 2, "lightcolor" => [1,1,1], "from" => [0,100,-100], "to" => [0,0,0]} ); LightSource(RI_DISTANTLIGHT, { "intensity" => 1, "lightcolor" => [1,1,1], "from" => [100,-100,-100], "to" => [0,0,0]} ); Projection(RI_PERSPECTIVE, { "fov" => 6.5 }); Sides(1); Translate(0, 0, 40); WorldBegin(); Rotate ($fr -81 , 1, 0, 0); Rotate ( 4* ($fr-1), 0, 1 ,0); # AttributeBegin(); # Rotate (-90, 1, 0, 0); # Surface("LGParquetPlank"); # Disk(-1.25, 2, 360); # AttributeEnd(); Surface("plastic"); for ($r = 0; $r <= 1; $r += .2) { for ($g = 0; $g <= 1; $g += .2) { for ($b = 0; $b <= 1; $b += .2) { ($h, $s, $v) = rgb2hsv($r, $g, $b); AttributeBegin(); Rotate ($h, 0, 1, 0); Translate (2*$s * $v, 2*$v-1, 0); Color ($r, $g, $b); Sphere(.1, -.1, .1, 360); AttributeEnd(); } } } WorldEnd(); FrameEnd(); } End();