U0 Main()
{
  F64 theta=0,phi=0,omega=0;
  CD3I32 poly[4];
  CDC *dc=DCAlias;
  DCDepthBufAlloc(dc);
  dc->flags|=DCF_TRANSFORMATION|DCF_SYMMETRY;
  try {
    while (!ScanChar) {
      DCDepthBufRst(dc);
      DCSymmetrySet(dc,Fs->pix_width/2,Fs->pix_height/2,
            ms.pos.x-Fs->pix_left-Fs->scroll_x,
            ms.pos.y-Fs->pix_top-Fs->scroll_y);
      dc->color=LTBLUE;
      GrLine(dc,Fs->pix_width/2,Fs->pix_height/2,
            ms.pos.x-Fs->pix_left-Fs->scroll_x,
            ms.pos.y-Fs->pix_top-Fs->scroll_y);

      Mat4x4IdentEqu(dc->r);
      Mat4x4RotX(dc->r,omega);
      Mat4x4RotY(dc->r,phi);
      Mat4x4RotZ(dc->r,theta);
      DCMat4x4Set(dc,dc->r);

      dc->x=Fs->pix_width/2;
      dc->y=Fs->pix_height/2;
      dc->z=500;

      dc->color=GREEN;
      poly[0].x=50;
      poly[0].y=150;
      poly[0].z=0;
      poly[1].x=275;
      poly[1].y=100;
      poly[1].z=0;
      poly[2].x=155;
      poly[2].y=200;
      poly[2].z=0;
      poly[3].x=100;
      poly[3].y=200;
      poly[3].z=0;
      GrFillPoly3(dc,4,poly);

      dc->color=RED;
      poly[0].x=50;
      poly[0].y=150;
      poly[0].z=50;
      poly[1].x=275;
      poly[1].y=100;
      poly[1].z=50;
      poly[2].x=155;
      poly[2].y=200;
      poly[2].z=50;
      poly[3].x=100;
      poly[3].y=200;
      poly[3].z=50;
      GrFillPoly3(dc,4,poly);

      dc->color=BLUE;
      poly[0].x=50;
      poly[0].y=150;
      poly[0].z=-50;
      poly[1].x=275;
      poly[1].y=100;
      poly[1].z=-50;
      poly[2].x=155;
      poly[2].y=200;
      poly[2].z=-50;
      poly[3].x=100;
      poly[3].y=200;
      poly[3].z=-50;
      GrFillPoly3(dc,4,poly);

      dc->color=RED+GREEN<<16+ROPF_DITHER;
      poly[0].x=50;
      poly[0].y=150;
      poly[0].z=50;
      poly[1].x=275;
      poly[1].y=100;
      poly[1].z=50;
      poly[2].x=275;
      poly[2].y=100;
      poly[2].z=0;
      poly[3].x=50;
      poly[3].y=150;
      poly[3].z=0;
      GrFillPoly3(dc,4,poly);

      dc->color=BLUE+GREEN<<16+ROPF_DITHER;
      poly[0].x=100;
      poly[0].y=200;
      poly[0].z=-50;
      poly[1].x=155;
      poly[1].y=200;
      poly[1].z=-50;
      poly[2].x=155;
      poly[2].y=200;
      poly[2].z=0;
      poly[3].x=100;
      poly[3].y=200;
      poly[3].z=0;
      GrFillPoly3(dc,4,poly);

      Refresh;
      DCFill;
      theta+=2.1*pi/180.0;
      phi+=1.1*pi/180.0;
      omega+=0.5*pi/180.0;
    }
  } catch
    PutExcept;

  DCFill;
  DCDel(dc);
}

Main;