setMetal(1.25); } else { $metal->setMetal(strtolower(urldecode($_GET['metal']))); } } else if (isset($_POST['metal'])) { $metal=new Image_3D_Color_Metal(255,255,255); if (strlen($_POST['metal']) == 0) { $metal->setMetal(1.25); } else { $metal->setMetal(strtolower(urldecode($_POST['metal']))); } } else { $metal=null; } if (!$metal && ($shape == "cone" || $shape == "") && $textx == "") { $delim=""; if ($arg) { foreach ($argv as $arg) { $e=explode("=",$arg); if (count($e) == 2) { $textx.=$delim . $e[1]; switch (strtolower(trim($textx))) { case "cone": $shape=strtolower(trim($textx)); $textx=""; break; case "torus": $shape=strtolower(trim($textx)); $textx=""; break; case "sphere": $shape=strtolower(trim($textx)); $textx=""; break; case "cube": $shape=strtolower(trim($textx)); $textx=""; break; case "bundt": $shape=strtolower(trim($textx)); $textx=""; break; case "helicoid": $shape=strtolower(trim($textx)); $textx=""; break; case "star": $shape=strtolower(trim($textx)); $textx=""; break; case "spherocube": $shape=strtolower(trim($textx)); $textx=""; break; } } else { $textx.=$delim . $e[0]; } if ($delim == "") { $textx=""; } $delim=" "; } if ($textx != "") { $textx=trim($textx); if ($textx != "") { $shape=""; } } } } $world = new Image_3D(); $world->setColor(new Image_3D_Color(255,255,255)); // A blue light from the left $light1 = $world->createLight('Light',array(-300,0,-300)); $light1->setColor(new Image_3D_Color(100,100,255)); // A green light from the upper-right $light2 = $world->createLight('Light',array(300,-300,-300)); $light2->setColor(new Image_3D_Color(100,255,100)); switch ($shape) { case "cone": $cone = $world->createObject('cone',array('detail' => 64)); if ($metal) { $cone->setColor($metal); } else { $cone->setColor(new Image_3D_Color(255,255,255)); } $cone->transform($world->createMatrix('scale', array(70, 220, 70))); $cone->transform($world->createMatrix('rotation',array(-45, -120, -10))); $cone->transform($world->createMatrix('move', array(-50, -30, 10))); break; case "torus": $torus = $world->createObject('torus', array('inner_radius' => 90,'outer_radius' => 120,'detail_1' => 10,'detail_2' => 10)); if ($metal) { $torus->setColor($metal); } else { $torus->setColor(new Image_3D_Color(255, 255, 255)); } $torus->transform($world->createMatrix('Rotation', array(-45,0,-30))); $torus->transform($world->createMatrix('Move', array(0,-20,0))); break; case "cube": $cube = $world->createObject('cube',array(100, 100, 100)); if ($metal) { $cube->setColor($metal); } else { $cube->setColor(new Image_3D_Color(255,255,255)); } $cube->transform($world->createMatrix('rotation',array(-60,60,40))); break; case "sphere": $sphere = $world->createObject('sphere',array('r' => 85, 'detail' => 5)); if ($metal) { $sphere->setColor($metal); } else { $sphere->setColor(new Image_3D_Color(255, 255, 255)); } break; case "bundt": $map = $world->createObject('map'); $scale = 130; $detail = 15; //35; $increment = 1 / $detail; for ($r = 0; $r <= 1; $r += $increment) { $row = array(); for ($t = 0; $t <= (2 * pi()); $t += $increment) { $row[] = new Image_3D_Point( $scale * ($r * cos($t)), $scale * ($r * sin($t)), $scale * (sin(4 * pi() * $r)) ); } $map->addRow($row); } if ($metal) { $map->setColor($metal); } else { $map->setColor(new Image_3D_Color(255, 255, 255)); } $map->transform($world->createMatrix('Rotation', array(-45, 0, -15))); break; case "helicoid": $map = $world->createObject('map'); $scale = 120; $detail = 10; //30; $levels = 6; $increment = 1 / $detail; for ($s = 0; $s <= 1; $s += $increment) { $row = array(); for ($t = 0; $t <= $levels; $t += $increment) { $row[] = new Image_3D_Point( $scale * ($s * cos(2 * pi() * $t)), // x $scale * ($s * sin(2 * pi() * $t)), // y $scale * ($t) // z ); } $map->addRow($row); } if ($metal) { $map->setColor($metal); } else { $map->setColor(new Image_3D_Color(255, 255, 255)); } $map->transform($world->createMatrix('Rotation', array(-50, 0, 15))); $map->transform($world->createMatrix('Move', array(50, -220, 0))); break; case "star": $polygons = array(); // Front face $polygons[] = array( array(0, -120, 0), array(-18, -12, 0), array(-86, 48, 0), array(0, 18, 0), array(86, 48, 0), array(18, -12, 0) ); // Back face $polygons[] = array( array(0, -120, 60), array(-18, -12, 60), array(-86, 48, 60), array(0, 18, 60), array(86, 48, 60), array(18, -12, 60) ); // 3 Sides $polygons[] = array( array(0, -120, 0), array(-18, -12, 0), array(-86, 48, 0), array(-86, 48, 60), array(-18, -12, 60),array(0, -120, 60) ); $polygons[] = array( array(-86, 48, 0), array(0, 18, 0), array(86, 48, 0), array(86, 48, 60), array(0, 18, 60), array(-86, 48, 60) ); $polygons[] = array( array(86, 48, 0), array(18, -12, 0), array(0, -120, 0), array(0, -120, 60), array(18, -12, 60),array(86, 48, 60) ); foreach ($polygons as $poly) { $points = array(); foreach ($poly as $set) { $points[] = new Image_3D_Point($set[0], $set[1], $set[2]); } $p = $world->createObject('polygon', $points); if ($metal) { $p->setColor($metal); } else { $p->setColor(new Image_3D_Color(255, 255, 255)); } } $world->transform($world->createMatrix('Rotation',array(0, -25, -15))); break; case "spherocube": for ($x=0; $x < 5; $x++) { for ($y=0; $y < 5; $y++) { for ($z=0; $z < 5; $z++) { $sphere = $world->createObject('sphere',array('r' => 25, 'detail' => 2)); if ($metal) { $sphere->setColor($metal); } else { $sphere->setColor(new Image_3D_Color(255, 255, 255)); } $sphere->transform($world->createMatrix('Move',array($x * 75, $y * 75, $z * 75))); $sphere->transform($world->createMatrix('Rotation',array(45, 30, 15))); } } } $world->transform($world->createMatrix('Move', array(-225, -100, 0))); break; default: if ($textx != "") { if (file_exists('Image/3D/Paintable/Object/TextData.dat')) { file_put_contents('Image/3D/Paintable/Object/TextData.dat', $textx); } $text = $world->createObject('text', $textx); if ($metal) { $text->setColor($metal); } else { $text->setColor(new Image_3D_Color(255, 255, 255)); } $text->transform($world->createMatrix('Scale', array(6, 6, 6))); $text->transform($world->createMatrix('Rotation',array(-35, 30, -15))); $text->transform($world->createMatrix('Move', array(-150, 10, 20))); } break; } // Render and save the 2-D image $world->createRenderer('Perspectively'); $world->createDriver('gd'); $world->render(400, 400, 'object' . $shape . '.png'); header ('Content-type:image/png'); echo file_get_contents('object' . $shape . '.png'); ?>