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

Search the boards