home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-06-16 | 3.7 KB | 182 lines |
- ' ---------------------------------
- '
- ' AMOSPro Compiler Example
- '
- ' Fractal Landscaping 1
- '
- ' By Jean-Baptiste BOLCATO
- '
- ' (c) 1993 Europress Software Ltd.
- '
- ' ---------------------------------
- '
- '
- ' -------------------------------------------------
- ' Remark: Random fractal Landscape Generator
- ' Basic (but fast) outlined version
- '
- ' Average Acceleration: 300 %
- '
- ' Test configuration: A1200, 6Mb
- '
- ' Original AMOS Compiler: 200 %
- ' -------------------------------------------------
-
- ' ---- Variables Init ----
-
- Set Buffer 50
-
- ' Set lens parameters
- DIST=500 : ZOM=400
-
- ' Time for loops
- TIME=1000
-
- ' Coord grid limits
- XF1=-100 : ZF1=-100 : YF1=50
- XF2=100 : ZF2=100
-
- ' Options screen
- Screen Open 0,320,32,2,Hires
- Palette 0,$FFF
-
- ' Number of steps
- Input "Grid Subdivision (1 to 32)?:";NS
- If NS<1
- NS=1
- Else
- If NS>32
- NS=32
- End If
- End If
-
- Dim X3D(NS,NS),Y3D(NS,NS),Z3D(NS,NS)
- Dim XROT(NS,NS),YROT(NS,NS),ZROT(NS,NS)
- Dim X2D(NS,NS),Y2D(NS,NS)
-
- ' Size of gridding intervals
- ITX=(XF2-XF1)/NS
- ITZ=(ZF2-ZF1)/NS
-
-
- ' ---- Screen Init ----
-
- Screen Open 0,320,256,2,Lowres
- Palette 0,$FFF
- Screen Display 0,128,45,,
- Curs Off : Cls 0 : Hide
- Double Buffer : Autoback 0
-
- ' ---- Main Loop ----
-
- Degree
- PHI=240
- TETA=-60
-
- Timer=0
-
- ' Init landscape
-
- For J=1 To NS
- For I=1 To NS
- X3D(I,J)=XF1+ITX*I
- Z3D(I,J)=ZF1+ITZ*J
- R=((Abs(I-NS/2)+Abs(J-NS/2))*90)/NS
- Y3D(I,J)=-128*Cos(R)
- Next I
- Next J
-
- N=0
- Repeat
-
- Cls 0
-
- ' Increment rotation angle
- Add PHI,2,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
-
- For J=1 To NS
- For I=1 To NS
-
- ' Patch Y - landscape deformation
- Y3D2=Y3D(I,J)*Cos((N-1)*4) : Rem+(SPHI*((I and 2)-1))/4
-
- ' Calculation of rotated 3D coords of new point
- ' ( /*256 to bring back cos and sin beetween 0->1)
- ' Rotation (X-Z with PHI)
- XROT(I,J)=(X3D(I,J)*CPHI+Z3D(I,J)*SPHI)/256
- ZROT(I,J)=(Z3D(I,J)*CPHI-X3D(I,J)*SPHI)/256
- YROT(I,J)=(Y3D2*CTETA+ZROT(I,J)*STETA)/256
- ZROT(I,J)=(ZROT(I,J)*CTETA-Y3D2*STETA)/256
-
- ' Calculation of screen coords
- X2D(I,J)=160+(XROT(I,J)*ZOM)/(DIST+ZROT(I,J))
- Y2D(I,J)=128+(YROT(I,J)*ZOM)/(DIST+ZROT(I,J))
-
- Next I
- Next J
-
- For J1=2 To NS
- If PHI>=0 and PHI<90
- J=NS-J1+2
- Else
- If PHI>=90 and PHI<180
- I=J1
- Else
- If PHI>=180 and PHI<270
- J=J1
- Else
- I=NS-J1+2
- End If
- End If
- End If
- For I1=2 To NS
-
- If PHI>=0 and PHI<90
- I=I1
- Else
- If PHI>=90 and PHI<180
- J=I1
- Else
- If PHI>=180 and PHI<270
- I=NS-I1+2
- Else
- J=NS-I1+2
- End If
- End If
- End If
-
- ' Draw outlined face
- Ink 15
- Polygon X2D(I,J),Y2D(I,J) To X2D(I-1,J),Y2D(I-1,J) To X2D(I-1,J-1),Y2D(I-1,J-1) To X2D(I,J-1),Y2D(I,J-1)
- Ink 0
- Polyline X2D(I,J),Y2D(I,J) To X2D(I-1,J),Y2D(I-1,J) To X2D(I-1,J-1),Y2D(I-1,J-1) To X2D(I,J-1),Y2D(I,J-1) To X2D(I,J),Y2D(I,J)
-
- Next I1
- Next J1
-
- Screen Swap
- Wait Vbl
-
- Inc N
-
- Until Timer>=TIME
- T#=Timer
-
- ' --- Final Report ---
-
- Autoback 1 : Paper 0 : Pen 1
- Print " Needs";T#/50;" seconds for";N;" loops."
- Print " ( =";T#/N;" VBLs )"
- Print
- Print " Press mouse key to end"
- Repeat
- Multi Wait
- Until Mouse Key or(Inkey$<>"")
- End