вообще я писал для нашего информатика 3д куб... мы 'алго' изучаем

program example_3d;
var vx,vy,vz,d:real;
run:boolean;
key:integer;
key_press:integer;
speed:real;
procedure b3d(var nx,ny:integer;x3d,y3d,z3d,vx,vy,vz,distance:real);
var ty,tz,tx,ox:real;
begin
ty := ((y3d * Cos(vx)) - (z3d * Sin(vx)));
tz := ((y3d * Sin(vx)) + (z3d * Cos(vx)));
tx := ((x3d * Cos(vy)) - (tz * Sin(vy)));
tz := ((x3d * Sin(vy)) + (tz * Cos(vy)));
ox := tx;
tx := ((tx * Cos(vz)) - (ty * Sin(vz)));
ty := ((ox * Sin(vz)) + (ty * Cos(vz)));
nx := Trunc(512 * (tx) / (distance - (tz)) + 320);
ny := Trunc(240 - (512 * ty) / (distance - (tz)));
end;
procedure line3d(zl1x,zl1y,zl1z,zl2x,zl2y,zl2z,vx,vy,vz,d:real);
var nx,ny,nx2,ny2:integer;
begin
b3d(nx,ny,zl1x,zl1y,zl1z,vx,vy,vz,d);
b3d(nx2,ny2,zl2x,zl2y,zl2z,vx,vy,vz,d);
line(nx-50,ny-50,nx2-50,ny2-50);
end;
procedure cube(var vx,vy,vz,d:real);
begin
line3d(0,0,0,1,0,0,vx,vy,vz,d);
line3d(0,0,0,0,1,0,vx,vy,vz,d);
line3d(0,0,0,0,0,1,vx,vy,vz,d);
line3d(1,0,0,1,1,0,vx,vy,vz,d);
line3d(1,0,0,1,0,1,vx,vy,vz,d);
line3d(0,0,1,1,0,1,vx,vy,vz,d);
line3d(0,0,1,0,1,1,vx,vy,vz,d);
line3d(0,1,1,1,1,1,vx,vy,vz,d);
line3d(1,1,0,1,1,1,vx,vy,vz,d);
line3d(0,1,0,1,1,0,vx,vy,vz,d);
line3d(0,1,0,0,1,1,vx,vy,vz,d);
line3d(1,0,1,1,1,1,vx,vy,vz,d);
end;
Function ReadKey: integer;
Var
i,j,k : integer;
Begin
j:=0;
k:=0;
if isevent=true then
begin
Event( i, j, k);
end;
ReadKey := j;
end;
begin
d:=10;
speed:=0.04;
vx:=0.2;
vy:=0.5;
vz:=0;
run:=true;
key_press:=1;
key:=999;
while run=true do
begin
if key=39 then
begin
vy:=vy+speed;
key_press:=1;
end;
if key=37 then
begin
vy:=vy-speed;
key_press:=1;
end;
if key=40 then
begin
vx:=vx-speed;
key_press:=1;
end;
if key=38 then
begin
vx:=vx+speed;
key_press:=1;
end;
if key<>0 then
begin
clear;
cube(vx,vy,vz,d);
if key_press=0 then run:=false;
end;
key_press:=0;
key:=ReadKey;
end;
end.