Zobrazí kocku v 3D s ktorou je možné pohybovať, otáčať, posúvať.

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: KMP (Klub mladých programátorov)

Program: Kocka3d.pasKockadat.pas
Súbor exe: Kocka3d.exe

Program vytvára 3D prostredie, v ňom zobrazi kocku. Kocka sa dá posúvať a otáčať. Projekčná plocha sa nachádza v počiatku súradnicovej sústavy, je nehybná. Kocka je vykresľovaná IBA PRED projekčnou plochou DO URČITEJ vzdialenosti. Vykresľovanie je obmedzené aj do šírky a výšky.
Ovládanie - a,s,d,w,q,e,j,k,l,i
{ KOCKA3D.PAS                                     Copyright (c) ... }
{                                                                   }
{ Program vytvara 3D prostredie, v nom zobrazi kocku.               }
{ Kocka sa da posuvat a otacat. Projekcna plocha sa nachadza        }
{ v pociatku suradnicovej sustavy, je nehybna.                      }
{ Kocka je vykreslovana IBA PRED projekcnou plochou DO URCITEJ      }
{ vzdialenosti. Vykreslovanie je obmedzene aj do sirky a vysky.     }
{ Ovladanie : a,s,d,w,q,e,j,k,l,i                                   }
{                                                                   }
{ Author: Neznamy                                                   }
{ Date  : 15.06.2009                           http://www.trsek.com }
 
PROGRAM Kocka3D;
USES Graph,Crt;
TYPE Body=record
       x,y,z:integer;
     end;
 
     TOs=(x,y,z); (* typ Os *)
 
     Vektory=Body;
 
     TKocka=object
       B:array[1..8] of Body;
       Vx,Vy,Vz:Vektory;
       procedure Init(x,y,z,a:integer);
       procedure Refresh;
       procedure Kresli;
       procedure Otoc(uhol:integer; os:TOs);
       procedure Posun(x,y,z:integer);
     end;
 
     Hranice=record
       x,y,z1,z2:integer;
     end;
 
VAR GDriver,GMode:integer;
    Kocka:TKocka;
    Stred:Body;
    N:Vektory;
    g:char;
    posuv,uhol:integer;
    hranica:Hranice;
    os:TOs;
 
{$I KockaDat.pas}
 
BEGIN
  GDriver:=CGA;
  GMode:=CGAC0;
  InitGraph(GDriver,GMode,'');
 
  Stred.x:=GetMaxX div 2; (* stred premietania *)
  Stred.y:=GetMaxY div 2;
  Stred.z:=-(GetMaxX div 2);
 
  N.x:=0; (* normalovy vektor premietacej roviny *)
  N.y:=0;
  N.z:=1;
 
  Hranica.z1:=0; (* ohranicenie priestoru v ktorom je kocka vykreslovana *)
  Hranica.z2:=GetMaxX*2;
  Hranica.x:=round(GetMaxX*4); (* konst. 4=max, 2=min *)
  Hranica.y:=round(GetMaxY*4);
 
  posuv:=10; (* rychlost posuvania a otacania *)
  uhol:=10;
 
  Kocka.Init(300,300,200,100);
  repeat
    ClearDevice;
    Kocka.Kresli;
    outtextxy(10,100,'Ovladanie : a,s,d,w,q,e,j,k,l,i');
    g:=readkey;
    case g of
      'a' : Kocka.Posun(-posuv,0,0);
      'd' : Kocka.Posun( posuv,0,0);
      's' : Kocka.Posun(0,posuv, 0);
      'w' : Kocka.Posun(0,-posuv,0);
      'r' : Kocka.Posun(0,0, posuv);
      'f' : Kocka.Posun(0,0,-posuv);
      'q' : Kocka.Otoc(uhol,y);
      'e' : Kocka.Otoc(-uhol,y);
      'j' : Kocka.Otoc( uhol,z);
      'l' : Kocka.Otoc(-uhol,z);
      'i' : Kocka.Otoc( uhol,x);
      'k' : Kocka.Otoc(-uhol,x);
    end;
  until g=#27;
  CloseGraph;
END.