Posted By: Marek (Mark ) on board 'CZgraphics'
Title: 3D in pascal, little&fast
Date: Wed Oct 10 20:19:39 1997
WWW-Info: posted from boco.fee.vutbr.cz (147.229.9.11)
Nazdar decka !
Ja vim, ze uz vsichni umite rotovat 3D v pascalu, ale pro ty ostatni je tu
neco starsiho z me dilny... Doporucuji stahnout z WeWeWecka lijany...
Const p = 72;
range = 0.01;
d = $3C9;
Var x,y,z : Array[1..100] Of Real;
o : Array[1..100] Of Word;
sx,sy,sz,cx,cy,cz : Array[0..255] Of Real;
a,b : Byte;
pf,t1,t2 : Real;
Begin
For a:=1 To 5 Do For b:=(a-1)*20+1 To 20*a Do
Begin
x[b]:=50*Sin(b/10*pi);
y[b]:=a*12-30;
z[b]:=50*Cos(b/10*pi);
End;
Asm
mov ax,13h
int 10h
End;
For a:=0 To 255 Do
Begin
Port[d-1]:=a;Port[d]:=0;Port[d]:=32*a Div p;Port[d]:=0;
pf:=a*pi/128;t1:=Range*(1+Sin(pf));t2:=Range*(1+Cos(pf));
sx[a]:=Sin(t1);cx[a]:=Cos(t1);sy[a]:=Sin(t2);cy[a]:=Cos(t2);
t2:=Range*2-t1;sz[a]:=Sin(t2);cz[a]:=Cos(t2);
End;
Randomize;b:=Random(256);
Repeat
For a:=1 To 100 Do
Begin
mem[SegA000:o[a]]:=0;
t1:=y[a];y[a]:=t1*cx[b]-z[a]*sx[b];z[a]:=t1*sx[b]+z[a]*cx[b];
t1:=x[a];x[a]:=t1*cy[b]-z[a]*sy[b];z[a]:=t1*sy[b]+z[a]*cy[b];
t1:=x[a];x[a]:=t1*cz[b]-y[a]*sz[b];y[a]:=t1*sz[b]+y[a]*cz[b];
Pf:=p/(p+z[a]);
o[a]:=32160+Round(Pf*x[a])-320*Round(Pf*y[a]);
mem[SegA000:o[a]]:=Round(p-z[a]);
End;
inc(b);
Until Port[$60]<128;
Asm
mov ax,3
int 10h
End;
End.
Caute
Mark