worlds first: '3d-engine' in php
<?php /* worlds first "3d-engine" written entirely in php copyright (c) 2002 rasmus christian kaae kaae@daimi.au.dk note: this piece of simple code does not demonstrate anything else than the capabilities to render images through serverside scripting (i.e. php). it uses easy formulas and standard php-functions. run: to run this you need to have access to a php-server with gd-lib installed. my web-account at uni has this but since i figure that it would more or less kill the webserver if i put it online for public-display you'll need to install it yourself (or ask a friend). */ function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } $scale = 2.0; $point[0][0] = -$scale; $point[0][1] = -$scale; $point[0][2] = $scale; $point[1][0] = -$scale; $point[1][1] = $scale; $point[1][2] = $scale; $point[2][0] = $scale; $point[2][1] = $scale; $point[2][2] = $scale; $point[3][0] = $scale; $point[3][1] = -$scale; $point[3][2] = $scale; $point[4][0] = -$scale; $point[4][1] = -$scale; $point[4][2] = -$scale; $point[5][0] = -$scale; $point[5][1] = $scale; $point[5][2] = -$scale; $point[6][0] = $scale; $point[6][1] = $scale; $point[6][2] = -$scale; $point[7][0] = $scale; $point[7][1] = -$scale; $point[7][2] = -$scale; $counter = getmicrotime(); $xpos = 5.0*sin($counter*0.25); $ypos = 5.0*cos($counter*0.75); $zpos = 10.0*sin($counter*0.5)-20.0; $xrot = $counter; $yrot = $counter*0.25; $zrot = $counter*0.125; $s1 = sin($xrot); $s2 = sin($yrot); $s3 = sin($zrot); $c1 = cos($xrot); $c2 = cos($yrot); $c3 = cos($zrot); for ($i=0; $i<8; $i++) { $x = $point[$i][0]; $y = $point[$i][1]; $z = $point[$i][2]; $point[$i][0] = $x*($s1*$s2*$s3 + $c1*$c3) + $y*($c2*$s3) + $z*($c1*$s2*$s3 - $c3*$s1); $point[$i][1] = $x*($c3*$s1*$s2 - $c1*$s3) + $y*($c2*$c3) + $z*($c1*$c3*$s2 + $s1*$s3); $point[$i][2] = $x*($c1*$s2*$s3 - $c3*$s1) + $y*(-$s2) + $z*($c1*$c2); $point[$i][0] += $xpos; $point[$i][1] += $ypos; $point[$i][2] += $zpos; if ($point[$i][2]==0) $point[$i][2]=0.000001; $point[$i][0] = 128+((256.0*$point[$i][0])/(float)$point[$i][2]); $point[$i][1] = 128+((256.0*$point[$i][1])/(float)$point[$i][2]); } header ("Content-type: image/png"); $im = @imagecreate (256, 256) or die ("Cannot Initialize new GD image stream"); $background_color = imagecolorallocate ($im, 255, 255, 255); $wire_color = imagecolorallocate ($im, 0, 0, 0); imageline($im, $point[0][0], $point[0][1], $point[1][0], $point[1][1], $wire_color); imageline($im, $point[1][0], $point[1][1], $point[2][0], $point[2][1], $wire_color); imageline($im, $point[2][0], $point[2][1], $point[3][0], $point[3][1], $wire_color); imageline($im, $point[3][0], $point[3][1], $point[0][0], $point[0][1], $wire_color); imageline($im, $point[4][0], $point[4][1], $point[5][0], $point[5][1], $wire_color); imageline($im, $point[5][0], $point[5][1], $point[6][0], $point[6][1], $wire_color); imageline($im, $point[6][0], $point[6][1], $point[7][0], $point[7][1], $wire_color); imageline($im, $point[7][0], $point[7][1], $point[4][0], $point[4][1], $wire_color); imageline($im, $point[4][0], $point[4][1], $point[0][0], $point[0][1], $wire_color); imageline($im, $point[5][0], $point[5][1], $point[1][0], $point[1][1], $wire_color); imageline($im, $point[6][0], $point[6][1], $point[2][0], $point[2][1], $wire_color); imageline($im, $point[7][0], $point[7][1], $point[3][0], $point[3][1], $wire_color); imagepng ($im); ?>
[ back to the prod ]