home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Amos / amproe2x.dms / in.adf / Compiler_Examples / AMOS_versions / 3Dcube1.AMOS / 3Dcube1.amosSourceCode
Encoding:
AMOS Source Code  |  1993-06-16  |  2.7 KB  |  153 lines

  1. ' ---------------------------------  
  2. '
  3. ' AMOSPro Compiler Example 
  4. '
  5. ' Linear 3D-cuboid 
  6. '
  7. ' By Jean-Baptiste BOLCATO 
  8. '
  9. ' (c) 1993 Europress Software Ltd. 
  10. '
  11. ' ---------------------------------  
  12. '
  13. ' -----------------------------------------------      
  14. ' Remark:  A nice little 3D-line cube!   
  15. '          It's a simple effect and is calculated in real time.    
  16. '
  17. '          Average Acceleration:  260 %
  18. '
  19. '          Test configuration: A1200, 6Mb  
  20. '
  21. '          Original AMOS Compiler:  200 %  
  22. ' -----------------------------------------------      
  23.  
  24.  
  25. ' ---- Variables Init ---- 
  26.  
  27. ' Ntsc test  
  28. YMID=128-28*(Ntsc=True)
  29.  
  30. ' Lens paramenter
  31. DIST=500 : ZOM=350
  32.  
  33. ' Number of loops
  34. NL=100
  35.  
  36. ' Init coords  
  37. Restore _DATA_POINTS
  38. Read NP
  39. Dim XP(NP),YP(NP),ZP(NP)
  40. Dim XP2(NP),YP2(NP),ZP2(NP)
  41. For I=1 To NP
  42.    Read XP(I),YP(I),ZP(I)
  43. Next I
  44.  
  45. Restore _DATA_ARETES
  46. Read NA
  47. Dim P(NA,2)
  48. For I=1 To NA
  49.    For J=1 To 2
  50.       Read P(I,J)
  51.    Next J
  52. Next I
  53.  
  54. ' ---- Screen Init ----
  55.  
  56. Screen Open 0,320,YMID*2,2,Lowres
  57. Palette 0,$FFF,$BBB,$444
  58. Curs Off : Hide : Cls 0
  59.  
  60. Double Buffer 
  61. Autoback 0
  62. Degree 
  63.  
  64. ' ---- Main Loop ----
  65.  
  66. Timer=0
  67. For N=1 To NL
  68.    
  69.    Cls 0
  70.    
  71.    ' Increment rotation angles
  72.    Add TETA,1,0 To 359
  73.    Add PHI,2,0 To 359
  74.    
  75.    ' Orecalculation of COSs and SINs  
  76.    ' ( *256 to stay in integer mode (faster!))    
  77.    CPHI=Cos(PHI)*256
  78.    SPHI=Sin(PHI)*256
  79.    CTETA=Cos(TETA)*256
  80.    STETA=Sin(TETA)*256
  81.    
  82.    ' Calculation of rotated 3D coords of all points 
  83.    ' ( /256 to bring back COS and SIN between 0->1)     
  84.    ' Rotation (X-Z with PHI) & rotation (X-Y with TETA) 
  85.    For I=1 To NP
  86.       ZP2(I)=(ZP(I)*CPHI-YP(I)*SPHI)/256
  87.       YP2(I)=(ZP(I)*SPHI+YP(I)*CPHI)/256
  88.       XP2(I)=(XP(I)*CTETA-YP2(I)*STETA)/256
  89.       YP2(I)=(XP(I)*STETA+YP2(I)*CTETA)/256
  90.    Next I
  91.    
  92.    ' Calculation of A,B,C,D screen coords and draw lines      
  93.    For I=1 To NA
  94.       P1=P(I,1)
  95.       P2=P(I,2)
  96.       X2=160+(XP2(P2)*ZOM)/(DIST+ZP2(P2))
  97.       Y2=YMID+(YP2(P2)*ZOM)/(DIST+ZP2(P2))
  98.       If P1=0
  99.          Draw To X2,Y2
  100.       Else 
  101.          X1=160+(XP2(P1)*ZOM)/(DIST+ZP2(P1))
  102.          Y1=YMID+(YP2(P1)*ZOM)/(DIST+ZP2(P1))
  103.          Draw X1,Y1 To X2,Y2
  104.       End If 
  105.    Next I
  106.    Screen Swap 
  107.    Wait Vbl 
  108.    
  109. Next N
  110. T#=Timer
  111.  
  112. ' --- Final Report --- 
  113.  
  114. Autoback 1 : Cls 0 : Paper 0 : Pen 1
  115. Print "  Needs";T#/50;" seconds for";NL;" loops."
  116. V#=T#/NL
  117. Print "          ( =";V#;" VBLs )"
  118. Print 
  119. Print "    Press mouse key to end"
  120. Repeat 
  121.    Multi Wait 
  122. Until Mouse Key or(Inkey$<>"")
  123. End 
  124.  
  125. ' ---- Cube Data ----  
  126.  
  127. _DATA_POINTS:
  128. Data 8
  129.  
  130. Data -100,-100,-100
  131. Data 100,-100,-100
  132. Data 100,100,-100
  133. Data -100,100,-100
  134.  
  135. Data -100,-100,100
  136. Data 100,-100,100
  137. Data 100,100,100
  138. Data -100,100,100
  139.  
  140. _DATA_ARETES:
  141. Data 12
  142. Data 1,2
  143. Data ,3
  144. Data ,4
  145. Data ,1
  146. Data ,5
  147. Data ,6
  148. Data ,7
  149. Data ,8
  150. Data ,5
  151. Data 7,3
  152. Data 6,2
  153. Data 4,8