コード例 #1
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(-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();
コード例 #2
0
ファイル: raytrace.php プロジェクト: payonesmile/Image_3D
$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');
    $driver = $world->createDriver('GD');
    $world->render(15 * $factor, 15 * $factor, 'Image_3D_No_Raytrace.png');
} else {
    // Raytrace advanced crazy picture
    echo "RAYTRACE!\n";
    $renderer = $world->createRenderer('Raytrace');
    // Define the cameras position
    $renderer->setCameraPosition(new Image_3D_Coordinate(0, 0, -50 * $factor));
    // define antialiasing level
    $renderer->setRaysPerPixel(2);
    // Set recursive scan depth
    $renderer->scanDepth(3);
    // Enable shadows
    $renderer->enableShadows(true);
    $world->render(15 * $factor, 15 * $factor, 'Image_3D_Raytrace.png');