$hl = $l / 2.0; $a = new Vertex(array('x' => $x - $hl, 'y' => $y + $hl, 'z' => $z + $hl, 'color' => $red)); $b = new Vertex(array('x' => $x + $hl, 'y' => $y + $hl, 'z' => $z + $hl, 'color' => $green)); $c = new Vertex(array('x' => $x + $hl, 'y' => $y + $hl, 'z' => $z - $hl, 'color' => $blue)); $d = new Vertex(array('x' => $x - $hl, 'y' => $y + $hl, 'z' => $z - $hl, 'color' => $yellow)); $e = new Vertex(array('x' => $x - $hl, 'y' => $y - $hl, 'z' => $z + $hl, 'color' => $magenta)); $f = new Vertex(array('x' => $x + $hl, 'y' => $y - $hl, 'z' => $z + $hl, 'color' => $cyan)); $g = new Vertex(array('x' => $x + $hl, 'y' => $y - $hl, 'z' => $z - $hl, 'color' => $grey)); $h = new Vertex(array('x' => $x - $hl, 'y' => $y - $hl, 'z' => $z - $hl, 'color' => $white)); return array(new Triangle($a, $c, $b), new Triangle($a, $d, $c), new Triangle($e, $g, $h), new Triangle($e, $f, $g), new Triangle($e, $b, $f), new Triangle($a, $b, $e), new Triangle($d, $g, $c), new Triangle($d, $h, $g), new Triangle($a, $e, $h), new Triangle($a, $h, $d), new Triangle($f, $c, $g), new Triangle($f, $b, $c)); } $v = new Vector(array('dest' => new Vertex(array('x' => 20.0, 'y' => 20.0, 'z' => 0.0)))); $T = new Matrix(array('preset' => Matrix::TRANSLATION, 'vtc' => $v)); $S = new Matrix(array('preset' => Matrix::SCALE, 'scale' => 10.0)); $RY = new Matrix(array('preset' => Matrix::RY, 'angle' => M_PI_4)); $RX = new Matrix(array('preset' => Matrix::RX, 'angle' => M_PI_4)); $cam = new Camera(array('origin' => new Vertex(array('x' => 15.0, 'y' => 15.0, 'z' => 80.0)), 'orientation' => new Matrix(array('preset' => Matrix::RY, 'angle' => M_PI)), 'width' => 640, 'height' => 480, 'fov' => 60, 'near' => 1.0, 'far' => 100.0)); $renderer = new Render(640, 480, 'pic.png'); $origin = new Vertex(array('x' => 0.0, 'y' => 0.0, 'z' => 0.0)); $origin = $cam->watchVertex($origin); $repere = makeRepere(); $repere = $S->transformMesh($repere); $repere = $cam->watchMesh($repere); $renderer->renderMesh($repere, Render::EDGE); $renderer->renderVertex($origin); $cube = makeColoredCube(0.0, 0.0, 0.0, 1.0); $M = $T->mult($RX)->mult($RY)->mult($S); $cube = $M->transformMesh($cube); $cube = $cam->watchMesh($cube); $renderer->renderMesh($cube, Render::RASTERIZE); $renderer->develop();