1<?php
2
3require_once 'Image/3D.php';
4// resize image according to this factor
5$factor = 5;
6
7$world = new Image_3D();
8$world->setColor(new Image_3D_Color(255, 255, 255));
9
10$light = $world->createLight('Light', array(-4 * $factor, -4 * $factor, 0));
11$light->setColor(new Image_3D_Color(255, 255, 255, 100));
12$lightSphere = $world->createObject('sphere', array('r' => $factor, 'detail' => 0));
13$lightSphere->transform($world->createMatrix('Move', array(-4 * $factor, -4 * $factor, 0)));
14$lightSphere->setColor(new Image_3D_Color(255, 255, 255, 100));
15
16$light = $world->createLight('Light', array(4 * $factor, -4 * $factor, 0));
17$light->setColor(new Image_3D_Color(255, 255, 255, 100));
18$lightSphere = $world->createObject('sphere', array('r' => $factor, 'detail' => 0));
19$lightSphere->transform($world->createMatrix('Move', array(4 * $factor, -4 * $factor, 0)));
20$lightSphere->setColor(new Image_3D_Color(255, 255, 255, 100));
21
22$p = array();
23$bottom = $world->createObject('polygon', array(
24    new Image_3D_Point(-5 * $factor, 3 * $factor, 5 * $factor),
25    new Image_3D_Point(-5 * $factor, 3 * $factor, -5 * $factor),
26    new Image_3D_Point(5 * $factor, 3 * $factor, -5 * $factor),
27    new Image_3D_Point(5 * $factor, 3 * $factor, 5 * $factor),
28));
29$bottom->setColor(new Image_3D_Color(200, 200, 200, 0, .6));
30
31$top = $world->createObject('polygon', array(
32    new Image_3D_Point(-5 * $factor, 5 * $factor, 5 * $factor),
33    new Image_3D_Point(5 * $factor, 5 * $factor, 5 * $factor),
34    new Image_3D_Point(5 * $factor, -5 * $factor, 5 * $factor),
35    new Image_3D_Point(-5 * $factor, -5 * $factor, 5 * $factor),
36));
37$top->setColor(new Image_3D_Color(200, 200, 200, 0, .5));
38
39$redPlane = $world->createObject('polygon', array(
40    new Image_3D_Point(-5 * $factor, 1 * $factor, 2 * $factor),
41    new Image_3D_Point(-5 * $factor, 1 * $factor, -2 * $factor),
42    new Image_3D_Point(-1 * $factor, -1 * $factor, -2 * $factor),
43    new Image_3D_Point(-1 * $factor, -1 * $factor, 2 * $factor),
44));
45$redPlane->setColor(new Image_3D_Color(255, 0, 0, 100, 0));
46
47$bluePlane = $world->createObject('polygon', array(
48    new Image_3D_Point(5 * $factor, 1 * $factor, 2 * $factor),
49    new Image_3D_Point(5 * $factor, 1 * $factor, -2 * $factor),
50    new Image_3D_Point(1 * $factor, -1 * $factor, -2 * $factor),
51    new Image_3D_Point(1 * $factor, -1 * $factor, 2 * $factor),
52));
53$bluePlane->setColor(new Image_3D_Color(100, 100, 255, 0, 0));
54
55$world->transform($world->createMatrix('Rotation', array(10, 0, 0)));
56
57if (!@$argv[1]) {
58    // Create normal GD picture with projection
59    echo "Render with projection.\n";
60
61    $renderer = $world->createRenderer('perspectively');
62    $driver = $world->createDriver('GD');
63    $world->render(15 * $factor, 15 * $factor, 'Image_3D_No_Raytrace.png');
64} else {
65    // Raytrace advanced crazy picture
66    echo "RAYTRACE!\n";
67
68    $renderer = $world->createRenderer('Raytrace');
69
70    // Define the cameras position
71    $renderer->setCameraPosition(new Image_3D_Coordinate(0, 0, -50 * $factor));
72
73    // define antialiasing level
74    $renderer->setRaysPerPixel(2);
75
76    // Set recursive scan depth
77    $renderer->scanDepth(3);
78
79    // Enable shadows
80    $renderer->enableShadows(true);
81
82    $world->render(15 * $factor, 15 * $factor, 'Image_3D_Raytrace.png');
83}
84
85echo $world->stats();
86
87