{ 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.