Kui soovid kujundit pöörata ruumis, siis peaks olema teda hea pöörata kolmes sõltumatus tasandis(edasi-paremale, edasi-üles, paremale-üles). Põhimõte on sarnane kui eelmises näites, vaid pinna asemel liigub kujund ruumis. Kauguse koordinaati läheb vaja vaid pööramise arvutamiseks, joonistamiseks piisab esialgu x ja y- koordinaadist.
uses graph, crt;
type
punkt=record
       x: integer;
       y: integer;
       z: integer;
      end;
punktid= array[1..100] of punkt;
var p, p2 : punktid;
keskp: punkt;
arv: integer;
nurk1, nurk2: real;

procedure algus;
var d, m: integer;
begin
   p[1].x:=0;
   p[1].Y:=0;
   p[1].z:=100;
   p[2].x:=100;
   p[2].Y:=0;
   p[2].z:=0;
   p[3].x:=0;
   p[3].Y:=100;
   p[3].z:=0;
   p[4].x:=0;
   p[4].Y:=0;
   p[4].z:=0;
   p[5].x:=100;
   p[5].Y:=0;
   p[5].z:=0;
   p[6].x:=0;
   p[6].Y:=0;
   p[6].z:=100;
   arv:=6;
   d:=detect;
   initgraph(d, m, '');
   keskp.x:=getmaxx div 2;
   keskp.y:=getmaxy div 2;
end;

procedure joonista(p: punktid; kp: punkt; kogus: integer);
var i: integer;
begin
   for i:=2 to kogus do
   begin
    line(kp.x+p[i-1].x, kp.y+p[i-1].y, kp.x+p[i].x, kp.y+p[i].y);
   end;
   line(kp.x+p[arv].x, kp.y+p[arv].y, kp.x+p[1].x, kp.y+p[1].y);
end;

procedure keera(pp: punktid; var pp2: punktid; kogus: integer; x1, x2:
real);
var i: integer;
begin
  for i:=1 to kogus do begin
    pp2[i].x:=round(pp[i].x*cos(x1)+pp[i].y*sin(x1));
    pp2[i].y:=round(-pp[i].x*sin(x1)+pp[i].y*cos(x1));
    pp2[i].z:=pp[i].z;
  end;

  for i:=1 to kogus do begin
    pp2[i].x:=round(pp2[i].x*cos(x2)+pp2[i].z*sin(x2));
    pp2[i].z:=round(-pp2[i].x*sin(x2)+pp2[i].z*cos(x2));
  end;

end;

begin
   algus;
   nurk1:=0;

   repeat
   setcolor(black);
   joonista(p2, keskp, arv);
    keera(p, p2, arv, 0.3, nurk1);
    setcolor(white);
    joonista(p2, keskp, arv);
    delay(50);
    nurk1:=nurk1+Pi/60;
   until keypressed;
   readln;
   closegraph;
end.