#!/usr/bin/perl

print "#VRML V2.0 utf8\n";

$flnm = $ARGV[0];

open(CLOUDS,$flnm);
$line = <CLOUDS>;
@pcs = split(' ',$line);
$Radius = $pcs[0];
$Phi = $pcs[1];
$Intervals1 = $pcs[2];
$Intervals2 = $pcs[3];


$StepDeg = 90.0/$Intervals1;
$Step1 = $StepDeg*3.1415/180.0;
$StepDeg = $Phi/$Intervals2;
$Step2 = $StepDeg*3.1415/180.0;

$d2 = 0;
for $j (0 .. $Intervals2) {
    $d1 = 0;
    for $i (0 .. $Intervals1) {
	$x = $Radius * cos($d1) * cos($d2);
	$y = $Radius * sin($d2);
	$z = $Radius * sin($d1) * cos($d2);
	$Point[$j][$i][0] = $x;
	$Point[$j][$i][1] = $y;
	$Point[$j][$i][2] = $z;
	$d1 += $Step1;
    }
    $d2 += $Step2;
}

print "DEF Q1 Transform {\n";
print "  children Shape {\n";
print "    appearance Appearance { material Material {} }\n";
print "    geometry DEF PLATFORM IndexedFaceSet {\n";
print "      solid FALSE\n";
print "      creaseAngle 1.0\n";
print "      coord Coordinate {\n";
print "        point [\n";
for $j (0 .. $Intervals2) {
for $i (0 .. $Intervals1) {
  printf "          %6.3f %6.2f %6.2f,\n",
       $Point[$j][$i][0],$Point[$j][$i][1],$Point[$j][$i][2];
}
}
print "        ]\n";
print "      }\n";
print "      coordIndex [\n";
for $j (0 .. $Intervals2-1) {
for $i (0 .. $Intervals1-1) {
    $i3 = $j*($Intervals1+1) + $i;
    $i2 = $i3 + 1;
    $i0 = ($j+1)*($Intervals1+1) + $i;
    $i1 = $i0 + 1;
    print "                 $i0, $i1, $i2, $i3, -1,\n";
}
}
print "      ]\n";
print "    }\n";
print "  }\n";
print "}\n";

print "Transform {\n";
print "  rotation 0.0 1.0 0.0 1.571\n";
print "  children [\n";
print "    USE Q1\n";
print "    Transform {\n";
print "      rotation 0.0 1.0 0.0 1.571\n";
print "      children [\n";
print "        USE Q1\n";
print "        Transform {\n";
print "        	 rotation 0.0 1.0 0.0 1.571\n";
print "        	 children [\n";
print "        	   USE Q1\n";
print "          ]\n";
print "        }\n";
print "      ]\n";
print "    }\n";
print "  ]\n";
print "}\n";
