home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-06-16 | 3.2 KB | 158 lines |
- ' ---------------------------------
- '
- ' AMOSPro Compiler Example
- '
- ' 3D dotted Ball 2
- '
- ' By Jean-Baptiste BOLCATO
- '
- ' (c) 1993 Europress Software Ltd.
- '
- ' ---------------------------------
- '
- ' ------------------------------------------------------
- ' Remark: Here is a precalculated smooth-topped
- ' 3D dotted Ball.
- '
- ' Average Acceleration: 260 %
- '
- ' Test configuration: A1200, 6Mb
- '
- ' Original AMOS Compiler: 240 %
- ' ------------------------------------------------------
-
-
- ' ---- Variables Init ----
-
- Set Buffer 30
-
- ' Lens paramenter
- DIST0=512 : ZOM=256
-
- ' Radius and resolution of ball
- R=64
- NS1=16 : NS2=16
-
- ' Init coords
- On Error Goto _EXIT
- Degree
- NP=256
- Dim X3D(NP),Y3D(NP),Z3D(NP)
- SJ#=2*R : SJ#=SJ#/15
- SI#=360 : SI#=SI#/16
- K=0
- For J#=-R To R Step SJ#
- For I#=1 To 360-SI Step SI#
- Inc K
- X3D(K)=Sqr(R*R-(J#*J#))*Cos(I#)
- Y3D(K)=Sqr(R*R-(J#*J#))*Sin(I#)
- Z3D(K)=J#
- Next I#
- Next J#
- _EXIT:
- NP=K-1
-
- ' ---- Screen Init ----
-
- Screen Open 0,320,200,4,Lowres
- Flash Off : Curs Off : Hide : Cls 0
- Palette 0,$FFF,$777,$555
- For I=0 To 3
- Colour 17+I*4,$FCC
- Colour 18+I*4,$D22
- Colour 19+I*4,$A11
- Next I
- Double Buffer : Autoback 0
- If Chip Free>150000 Then STP=10 Else STP=5
-
- ' ---- Main Loop ----
-
- Timer=0
- For PHI=0 To 359 Step STP
-
- Cls 0
-
- ' Increment rotation angles
- Add TETA,1,0 To 359
-
- ' Precalculation of COSs and SINs
- ' ( *256 to stay in integer mode (faster!))
- CPHI=Cos(PHI)*256
- SPHI=Sin(PHI)*256
- CTETA=Cos(TETA)*256
- STETA=Sin(TETA)*256
-
- ' Modify zoom
- DIST=DIST0+SPHI
-
- ' Draw ball backbground
- R3D=(R*ZOM)/DIST
- Ink 3 : Circle 160,100,R3D : Paint 160,100
-
- For I=1 To NP
-
- ' Calculation of rotated 3D coords for each displayable
- ' point of the ball (Z>=0)
- ' ( /256 to bring back COS and SIN beetween 0->1)
- ' rotation (X-Z with PHI) & rotation (X-Y with TETA)
- Z=(Z3D(I)*CPHI-Y3D(I)*SPHI)/256
- Y=(Z3D(I)*SPHI+Y3D(I)*CPHI)/256
- X=(X3D(I)*CTETA-Y*STETA)/256
- Y=(X3D(I)*STETA+Y*CTETA)/256
-
- ' Calculation of screen coords of A,B,C,D and draw lines
- X=(X*ZOM)/(DIST+Z) : Add X,160
- Y=(Y*ZOM)/(DIST+Z) : Add Y,100
-
- ' Display point
- If Z<=0 Then Ink 1 Else Ink 2
- Plot X,Y
-
- Next I
-
- Inc N
- Get Bob N,160-64,100-64 To 160+64,100+64
-
- Screen Swap
- Wait Vbl
-
- Next PHI
-
- T#=Timer
-
- ' ---- Status Report ----
-
- Autoback 2 : Cls 0 : Paper 0 : Pen 1
- Print "Needs";T#/50;"s for the whole calculation."
- Print " ( =";T#/N;" VBLs per loop)"
- Wait 50
- Print " Ready?... ";
- Wait 50 : Print "Gooooo !!!"
- Wait 50
- Cls 0
- X1=100 : Y1=0 : VX1=1 : DF1=0
- X2=180 : Y2=0 : VX2=-2 : DF2=5
-
-
- ' ---- Final Fireworks!!! ----
-
- Set Bob 0,1,,
- Set Sprite Buffer 256 : Hide
-
- Clear Key
- Repeat
-
- Add DF1,1,1 To N
- Add X1,VX1 : If X1>192 or X1<0 Then VX1=-VX1
- Inc VY1 : Add Y1,VY1 : If Y1>80 Then Y1=80 : VY1=-4-Rnd(8)
- Bob 0,X1,Y1,DF1
-
- Add DF2,-1,1 To N
- Add X2,VX2 : If X2>192 or X2<0 Then VX2=-VX2
- Inc VY2 : Add Y2,VY2 : If Y2>80 Then Y2=80 : VY2=-4-Rnd(8)
- Sprite 0,X2+128,Y2+45,DF2
-
- Wait Vbl
-
- Until Mouse Key or(Inkey$<>"")
- End