home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-06-16 | 4.0 KB | 179 lines |
- ' ---------------------------------
- '
- ' AMOSPro Compiler Example
- '
- ' Texture mapped Face
- '
- ' By Jean-Baptiste BOLCATO
- '
- ' (c) 1993 Europress Software Ltd.
- '
- ' ---------------------------------
- '
- '
- ' --------------------------------------------
- ' Remark: Texture Mapped onto 1 rectangular face
- ' (similar effect to Dpaint's Anim-Move command)
- '
- ' Average Acceleration: 450 %
- '
- ' Test configuration: A1200, 6Mb
- '
- ' Original AMOS Compiler: 220 %
- ' --------------------------------------------
-
- ' ---- Variables Init ----
-
- DIST=500 : ZOM=600
-
- ' Number of loops
- NL=1
-
- ' Coord source
- XS1=0 : YS1=0
- XS2=320 : YS2=256
-
- ' Coord face limites
- XF1=-100 : YF1=-100
- XF2=100 : YF2=100
- ZD=0
-
- Degree
- Limit Mouse 0,0 To 359,359
-
- ' ---- Load Screen ----
-
- Load Iff "AMOSPro_Extras:Compiler_Examples/Graphics/demo_pic.iff",1
- Screen Hide 1
-
- ' ---- Info ----
-
- Screen Open 0,320,256,2,Lowres
- Palette 0,$FFF : Curs Off
- Locate 0,14 : Centre "Move the Mouse:"
- Locate 0,16 : Centre "Horizontally: to rotate"
- Locate 0,17 : Centre "Vertically: to zoom "
- Locate 0,19 : Centre "Click key to begin mapping!"
- Wait 150
-
- Do
-
- ' ---- Preview placement ----
-
- Screen Open 0,320,256,2,Lowres
- Curs Off : Hide
- Palette 0,$FFF
- Paper 0 : Pen 1 : Ink 1 : Cls 0
- Double Buffer : Autoback 0
-
- Repeat
-
- Cls 0
- Home : Print "Angle:";PHI;"� Zoom:";ZOM
-
- PHI=X Mouse
- ZOM=10+Y Mouse*3
-
- ' Precalculation of COSs and SINs
- ' ( *128 to stay in integer mode (so faster!))
- CPHI=Cos(PHI)*128
- SPHI=Sin(PHI)*128
-
-
- ' Calculation of 3D proj coords corners
- ZP1=(ZD*CPHI-XF1*SPHI)/128
- XP1=(ZD*SPHI+XF1*CPHI)/128
- ZP2=(ZD*CPHI-XF2*SPHI)/128
- XP2=(ZD*SPHI+XF2*CPHI)/128
-
- ' Calculation of screen coords of corners
- X1=160+(XP1*ZOM)/(DIST+ZP1)
- Y1=128+(YF1*ZOM)/(DIST+ZP1)
- X2=X1
- Y2=128+(YF2*ZOM)/(DIST+ZP1)
- X3=160+(XP2*ZOM)/(DIST+ZP2)
- Y3=128+(YF2*ZOM)/(DIST+ZP2)
- X4=X3
- Y4=128+(YF1*ZOM)/(DIST+ZP2)
-
- ' Draw the preview square
- Circle X1,Y1,2
- Draw X1,Y1 To X2,Y2
- Draw To X3,Y3
- Draw To X4,Y4
- Draw To X1,Y1
-
- Screen Swap
- Wait Vbl
-
- Until Mouse Click
-
- ' Remember extreme coordinates
- X0=Min(X1,X3) : If X0<0 Then X0=0
- X1=Max(X1,X3) : If X1>320 Then X1=320
- Y0=Min(Y1,Y4) : If Y0<0 Then Y0=0
- Y1=Max(Y2,Y3) : If Y1>256 Then Y1=256
-
- ' ---- Mapping! ----
-
- ' Init screen
- Screen 1
- Screen Open 0,Screen Width,Screen Height,Screen Colour,Lowres
- Flash Off : Curs Off : Cls 0 : Hide
- Get Palette 1
-
- Timer=0
-
- For N=1 To NL
-
- Cls 0
-
- ' Precalculation of COSs and SINs
- ' ( *128 to stay in integer mode (so faster!))
- CPHI=Cos(PHI)*128
- SPHI=Sin(PHI)*128
-
- For Y=Y0 To Y1
- For X=X0 To X1
-
- ' Reversed calculation 2D -> 3D (for Z=ZD and only PHI rotation)
- ZDC=ZD*CPHI
- DIST2=128*DIST
- X3=160*DIST2+160*ZDC+ZOM*ZD*SPHI-X*(DIST2+ZDC)
- X3=X3/(160*SPHI-X*SPHI-ZOM*CPHI)
- Y3=Y*(DIST+(ZDC-X3*SPHI)/128)-DIST2-ZDC+X3*SPHI
- Y3=Y3/ZOM
-
- ' If inside the face then calculate source pixel's ink
- If X3>XF1 and X3<XF2 and Y3>YF1 and Y3<YF2
- X2=XS1+((XS2-XS1)*(X3-XF1))/(XF2-XF1)
- Y2=YS1+((YS2-YS1)*(Y3-YF1))/(YF2-YF1)
- Screen 1 : IK=Point(X2,Y2)
- ' draw!
- Screen 0 : Plot X,Y,IK
- End If
-
- Next X
- Next Y
-
- ' Increment rotation angles
- Add PHI,10,0 To 359
-
- Next N
- T#=Timer
-
- ' --- Final Report ---
-
- Paper 0 : Pen 1 : Home
- Print " Needs";T#/50;" seconds for";NL;" loops."
- Print " ( =";T#/NL;" VBLs )"
- Print " Right button to quit, left to restart."
- Repeat
- Multi Wait
- MC=Mouse Click
- Until MC
- Exit If MC=2
-
- Loop
-
- End