require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(0, 0, 0)); $light1 = $world->createLight('Light', array(-300, 0, -300)); $light1->setColor(new Image_3D_Color(252, 175, 62)); $light2 = $world->createLight('Light', array(300, -300, -300)); $light2->setColor(new Image_3D_Color(164, 0, 0)); $count = 3; $size = 20; $offset = 10; for ($x = -($count - 1) / 2; $x <= ($count - 1) / 2; ++$x) { for ($y = -($count - 1) / 2; $y <= ($count - 1) / 2; ++$y) { for ($z = -($count - 1) / 2; $z <= ($count - 1) / 2; ++$z) { // if (max(abs($x), abs($y), abs($z)) < ($count - 1) / 2) continue; if (max($x, $y, $z) <= 0) { continue; } $cube = $world->createObject('quadcube', array($size, $size, $size)); $cube->setColor(new Image_3D_Color(255, 255, 255, 75)); $cube->transform($world->createMatrix('Move', array($x * ($size + $offset), $y * ($size + $offset), $z * ($size + $offset)))); } } } $world->transform($world->createMatrix('Rotation', array(220, 50, 0))); $world->transform($world->createMatrix('Scale', array(2, 2, 2))); $world->setOption(Image_3D::IMAGE_3D_OPTION_BF_CULLING, true); $world->setOption(Image_3D::IMAGE_3D_OPTION_FILLED, true); $world->createRenderer('perspectively'); $world->createDriver('DynamicCanvas'); $world->render(250, 250, 'Image_3D_Dynamic_Cubes.js'); echo $world->stats();
<?php $images = 'php://output'; $iterations = 50; set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(0, 0, 0)); $light1 = $world->createLight('Light', array(-500, -500, -500)); $light1->setColor(new Image_3D_Color(255, 255, 255)); $light2 = $world->createLight('Light', array(0, 500, -550)); $light2->setColor(new Image_3D_Color(0, 255, 0)); $p1 = $world->createObject('cube', array(80, 80, 80)); $p1->setColor(new Image_3D_Color(200, 200, 200)); $p1->transform($world->createMatrix('Rotation', array(45, 45, 0))); $world->setOption(Image_3D::IMAGE_3D_OPTION_BF_CULLING, false); $world->setOption(Image_3D::IMAGE_3D_OPTION_FILLED, true); $rotation = $world->createMatrix('Rotation', array(2, 5, 0)); $renderer = $world->createRenderer('perspectively'); $driver = $world->createDriver('ASCII'); $world->render(2 * 80, 6 * 30, $images); $start = microtime(true); $i = 0; while ($i++ < $iterations) { $p1->transform($rotation); $driver->reset(); $renderer->render($images); } $time = microtime(true) - $start; printf("%2.2f fps\n", $iterations / $time);
<?php require_once __DIR__ . '/../../vendor/autoload.php'; // resize image according to this factor $factor = 5; $world = new Image_3D(); $world->setColor(new Image_3D_Color(255, 255, 255)); $light = $world->createLight('Light', array(-4 * $factor, -4 * $factor, 0)); $light->setColor(new Image_3D_Color(255, 255, 255, 100)); $lightSphere = $world->createObject('sphere', array('r' => $factor, 'detail' => 0)); $lightSphere->transform($world->createMatrix('Move', array(-4 * $factor, -4 * $factor, 0))); $lightSphere->setColor(new Image_3D_Color(255, 255, 255, 100)); $light = $world->createLight('Light', array(4 * $factor, -4 * $factor, 0)); $light->setColor(new Image_3D_Color(255, 255, 255, 100)); $lightSphere = $world->createObject('sphere', array('r' => $factor, 'detail' => 0)); $lightSphere->transform($world->createMatrix('Move', array(4 * $factor, -4 * $factor, 0))); $lightSphere->setColor(new Image_3D_Color(255, 255, 255, 100)); $p = array(); $bottom = $world->createObject('polygon', array(new Image_3D_Point(-5 * $factor, 3 * $factor, 5 * $factor), new Image_3D_Point(-5 * $factor, 3 * $factor, -5 * $factor), new Image_3D_Point(5 * $factor, 3 * $factor, -5 * $factor), new Image_3D_Point(5 * $factor, 3 * $factor, 5 * $factor))); $bottom->setColor(new Image_3D_Color(200, 200, 200, 0, 0.6)); $top = $world->createObject('polygon', array(new Image_3D_Point(-5 * $factor, 5 * $factor, 5 * $factor), new Image_3D_Point(5 * $factor, 5 * $factor, 5 * $factor), new Image_3D_Point(5 * $factor, -5 * $factor, 5 * $factor), new Image_3D_Point(-5 * $factor, -5 * $factor, 5 * $factor))); $top->setColor(new Image_3D_Color(200, 200, 200, 0, 0.5)); $redPlane = $world->createObject('polygon', array(new Image_3D_Point(-5 * $factor, 1 * $factor, 2 * $factor), new Image_3D_Point(-5 * $factor, 1 * $factor, -2 * $factor), new Image_3D_Point(-1 * $factor, -1 * $factor, -2 * $factor), new Image_3D_Point(-1 * $factor, -1 * $factor, 2 * $factor))); $redPlane->setColor(new Image_3D_Color(255, 0, 0, 100, 0)); $bluePlane = $world->createObject('polygon', array(new Image_3D_Point(5 * $factor, 1 * $factor, 2 * $factor), new Image_3D_Point(5 * $factor, 1 * $factor, -2 * $factor), new Image_3D_Point(1 * $factor, -1 * $factor, -2 * $factor), new Image_3D_Point(1 * $factor, -1 * $factor, 2 * $factor))); $bluePlane->setColor(new Image_3D_Color(100, 100, 255, 0, 0)); $world->transform($world->createMatrix('Rotation', array(10, 0, 0))); if (!@$argv[1]) { // Create normal GD picture with projection echo "Render with projection.\n"; $renderer = $world->createRenderer('perspectively');
<?php set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(255, 255, 255)); $light = $world->createLight('Light', array(-2000, -2000, -2000)); $light->setColor(new Image_3D_Color(255, 255, 255)); $redLight = $world->createLight('Light', array(90, 0, 50)); $redLight->setColor(new Image_3D_Color(255, 0, 0)); $torus = $world->createObject('torus', array('inner_radius' => 110, 'outer_radius' => 170, 'detail_1' => 60, 'detail_2' => 30)); $torus->setColor(new Image_3D_Color(150, 150, 150)); $torus->transform($world->createMatrix('Rotation', array(60, -10, 0))); $renderer = $world->createRenderer('perspectively'); $world->createDriver('GD'); $world->render(500, 500, 'Image_3D_Object_Torus.png'); echo $world->stats();
set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(255, 255, 255)); $light = $world->createLight('Light', array(-2000, -2000, -2000)); $light->setColor(new Image_3D_Color(255, 255, 255)); $redSpot = $world->createLight('Spotlight', array(0, 0, -200, 'aim' => array(0, -25, 0), 'angle' => 30, 'float' => 2)); $redSpot->setColor(new Image_3D_Color(255, 0, 0)); $blueSpot = $world->createLight('Spotlight', array(0, 0, -200, 'aim' => array(-35, 25, 0), 'angle' => 30, 'float' => 2)); $blueSpot->setColor(new Image_3D_Color(0, 0, 255)); $greenSpot = $world->createLight('Spotlight', array(0, 0, -200, 'aim' => array(35, 25, 0), 'angle' => 30, 'float' => 2)); $greenSpot->setColor(new Image_3D_Color(0, 255, 0)); $map = $world->createObject('map'); $detail = 80; $size = 200; $height = 40; $raster = 1 / $detail; for ($x = -1; $x <= 1; $x += $raster) { $row = array(); for ($y = -1; $y <= 1; $y += $raster) { $row[] = new Image_3D_Point($x * $size, $y * $size, sin($x * pi()) * sin($y * 2 * pi()) * $height); } $map->addRow($row); } $map->setColor(new Image_3D_Color(150, 150, 150, 0)); $world->transform($world->createMatrix('Rotation', array(-20, 10, -10))); $world->createRenderer('perspectively'); $world->createDriver('GD'); $world->render(400, 400, 'Image_3D_Spotlights.png'); echo $world->stats();
// Erstellen der Welt $world = new Image_3D(); $world->setColor(new Image_3D_Color(255, 255, 255)); // Erstellung einer globalen Lichtquelle $light = $world->createLight('Light', array(-2000, -2000, -2000)); $light->setColor(new Image_3D_Color(155, 155, 155)); // Eines Punktuellen Lichtes mit distancefalloff $light = $world->createLight('Point', array(0, -100, 0, 'distance' => 200, 'falloff' => 2)); $light->setColor(new Image_3D_Color(255, 0, 0)); // Eines Spotlights $light = $world->createLight('Spotlight', array(500, -500, -300, 'aim' => array(50, 30, 0), 'angle' => 10, 'float' => 2)); $light->setColor(new Image_3D_Color(0, 255, 0, 100)); // Erstellen einer Kugel $sphere = $world->createObject('sphere', array('r' => 120, 'detail' => 5)); $sphere->setColor(new Image_3D_Color(200, 200, 200)); $sphere->transform($world->createMatrix('Move', array(70, 40, 0))); // Import eines 3ds-Objekts (Schriftzug "Image 3D") $text = $world->createObject('3ds', __DIR__ . '/models/Image_3D.3ds'); $text->setColor(new Image_3D_Color(255, 255, 255, 180)); $text->transform($world->createMatrix('Rotation', array(90, 0, 0))); $text->transform($world->createMatrix('Scale', array(5, 5, 5))); $text->transform($world->createMatrix('Move', array(0, -40, 0))); // Transformationen auf alle Objecte anwenden $text->transform($world->createMatrix('Scale', array(2, 2, 2))); // Erzeugen des gewuenschten Renderers $world->createRenderer('perspectively'); // Erzeugen des gewuenschten Ausgabetreibers $world->createDriver('SVG'); // Rendern des Bildes $world->render(800, 400, 'example.svg'); // Ausgabe einiger Statistiken zu dem gerade erstellten Bild
<?php set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(255, 255, 255)); $light = $world->createLight('Light', array(-2000, -2000, -2000)); $light->setColor(new Image_3D_Color(0, 0, 255)); $cone = $world->createObject('cone', array('detail' => 1)); $cone->setColor(new Image_3D_Color(255, 255, 255, 200)); $cone->transform($world->createMatrix('Scale', array(100, 400, 100))); $cone->transform($world->createMatrix('Move', array(0, -80, 0))->multiply($world->createMatrix('Rotation', array(150, 30, 30)))); $world->createRenderer('perspectively'); $world->createDriver('SVG'); $world->render(400, 400, 'Image_3D_Object_Cone_2.svg'); echo $world->stats();
$iterations = 40; $images = 'php://output'; set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(0, 0, 0)); $light1 = $world->createLight('Light', array(-500, 0, -500)); $light1->setColor(new Image_3D_Color(255, 50, 50)); $light2 = $world->createLight('Light', array(500, 0, -500)); $light2->setColor(new Image_3D_Color(50, 50, 255)); $p1 = $world->createObject('torus', array('inner_radius' => 50, 'outer_radius' => 90, 'detail_1' => 10, 'detail_2' => 1)); $p1->setColor(new Image_3D_Color(255, 255, 255)); $world->setOption(Image_3D::IMAGE_3D_OPTION_BF_CULLING, false); $world->setOption(Image_3D::IMAGE_3D_OPTION_FILLED, true); $rotation = $world->createMatrix('Rotation', array(0, 0, 15)); $Xrotation = $world->createMatrix('Rotation', array(10, 2, 0)); $move = $world->createMatrix('Move', array(0, 0, -10)); $renderer = $world->createRenderer('perspectively'); $driver = $world->createDriver('ASCII'); $world->render(2 * 100, 6 * 50, $images); $start = microtime(true); $i = 0; while ($i++ < $iterations) { $light1->transform($rotation); $light2->transform($rotation); $p1->setColor(new Image_3D_Color(255, 255, 255)); $p1->transform($Xrotation); $driver->reset(); $renderer->render($images); }
<?php set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(240, 240, 240)); $light = $world->createLight('Light', array(-20, -20, -20)); $light->setColor(new Image_3D_Color(100, 100, 255)); $text = $world->createObject('text', 'Image_3D_Object_Text'); $text->setColor(new Image_3D_Color(150, 150, 150)); $text->transform($world->createMatrix('Rotation', array(0, 10, 0))); $text->transform($world->createMatrix('Move', array(-50, 0, 20))); $text->transform($world->createMatrix('Scale', array(3, 3, 3))); $world->setOption(Image_3D::IMAGE_3D_OPTION_BF_CULLING, false); $world->setOption(Image_3D::IMAGE_3D_OPTION_FILLED, true); $world->createRenderer('perspectively'); $world->createDriver('GD'); $world->render(400, 50, 'Image_3D_Object_Text.png'); echo $world->stats();
<?php set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(50, 50, 50)); $light1 = $world->createLight('Light', array(-20, -20, -20)); $light1->setColor(new Image_3D_Color(255, 255, 255)); $light2 = $world->createLight('Light', array(20, 20, -20)); $light2->setColor(new Image_3D_Color(0, 200, 0)); $p1 = $world->createObject('polygon', array(new Image_3D_Point(-30, 100, 0), new Image_3D_Point(-30, -150, 0), new Image_3D_Point(80, 0, 30))); $p1->setColor(new Image_3D_Color(100, 200, 100)); $p2 = $world->createObject('polygon', array(new Image_3D_Point(-100, 50, 30), new Image_3D_Point(-70, -100, -20), new Image_3D_Point(150, 90, 0))); $p2->setColor(new Image_3D_Color(100, 100, 200)); $p2 = $world->createObject('polygon', array(new Image_3D_Point(-30, 20, -50), new Image_3D_Point(-50, -30, -80), new Image_3D_Point(50, 30, 40))); $p2->setColor(new Image_3D_Color(200, 100, 100, 100)); $world->transform($world->createMatrix('Rotation', array(90, 90, 0))); $world->setOption(Image_3D::IMAGE_3D_OPTION_BF_CULLING, false); $world->setOption(Image_3D::IMAGE_3D_OPTION_FILLED, true); $world->createRenderer('perspectively'); $world->createDriver('ZBuffer'); $world->render(400, 400, 'Image_3D_ZBuffer.png'); echo $world->stats();
<?php set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(255, 255, 255)); $light = $world->createLight('Light', array(0, 1000, 1000)); $light->setColor(new Image_3D_Color(255, 255, 255)); $pie = $world->createObject('pie', array('start' => 0, 'end' => 120, 'detail' => 20, 'outside' => 150)); $pie->setColor(new Image_3D_Color(0, 0, 255)); $pie = $world->createObject('pie', array('start' => 120, 'end' => 165, 'detail' => 20, 'outside' => 150)); $pie->setColor(new Image_3D_Color(255, 0, 0)); $pie = $world->createObject('pie', array('start' => 165, 'end' => 240, 'detail' => 20, 'outside' => 150)); $pie->setColor(new Image_3D_Color(255, 255, 0)); $pie = $world->createObject('pie', array('start' => 240, 'end' => 360, 'detail' => 20, 'outside' => 150)); $pie->setColor(new Image_3D_Color(0, 255, 0)); $world->setOption(Image_3D::IMAGE_3D_OPTION_BF_CULLING, false); $world->setOption(Image_3D::IMAGE_3D_OPTION_FILLED, true); $world->transform($world->createMatrix('Scale', array(1, 1, 10))); $world->transform($world->createMatrix('Rotation', array(-60, 0, 0))); $world->createRenderer('perspectively'); $world->createDriver('ZBuffer'); $world->render(400, 400, 'Image_3D_Object_Pie.png'); echo $world->stats();
<?php set_time_limit(0); require_once __DIR__ . '/../../vendor/autoload.php'; $world = new Image_3D(); $world->setColor(new Image_3D_Color(80, 80, 80)); $light = $world->createLight('Light', array(-1000, -1000, -1000)); $light->setColor(new Image_3D_Color(255, 255, 255)); $redSpot = $world->createLight('Spotlight', array(0, 0, -200, 'aim' => array(0, -25, 0), 'angle' => 30, 'float' => 2)); $redSpot->setColor(new Image_3D_Color(255, 0, 0)); $blueSpot = $world->createLight('Spotlight', array(0, 0, -200, 'aim' => array(-35, 25, 0), 'angle' => 30, 'float' => 2)); $blueSpot->setColor(new Image_3D_Color(0, 0, 255)); $greenSpot = $world->createLight('Spotlight', array(0, 0, -200, 'aim' => array(35, 25, 0), 'angle' => 30, 'float' => 2)); $greenSpot->setColor(new Image_3D_Color(0, 255, 0)); $bezier = $world->createObject('bezier', array('x_detail' => 120, 'y_detail' => 120, 'points' => array(array(array(200, -150, -200), array(-100, 150, 600), array(-300, 150, -600), array(200, -150, 200)), array(array(0, -200, -100), array(0, 100, 250), array(0, 200, -250), array(0, -100, 100)), array(array(-150, -150, -200), array(200, 150, 300), array(200, 200, -300), array(-150, -150, 200))))); $bezier->setColor(new Image_3D_Color(250, 250, 250)); $bezier->transform($world->createMatrix('Rotation', array(0, 120, 180))); $renderer = $world->createRenderer('perspectively'); $world->createDriver('ZBuffer'); $world->render(400, 400, 'example.png'); echo $world->stats();