home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 351-375 / apd375 / progs / vectors.amos / vectors.amosSourceCode
AMOS Source Code  |  1991-07-30  |  8KB  |  295 lines

  1. '=================================================================== 
  2. '
  3. 'DATE: 29/01/92
  4. 'TIME: 22:12 
  5. 'NAME: VECTORS.AMOS
  6. 'CODE: UNCLE SIMES 
  7. 'NOTE: THE 3D CODE IS A CHANGED (AND HOPEFULLY IMPROVED VERSION) OF  
  8. '      THAT WHICH APPEARED IN VOL 1 ISSUE 2 OF ALL ABOUT AMOS AND
  9. '      WAS ORIGINALLY WRITTEN BY RICHARD GALE. 
  10. '
  11. '=================================================================== 
  12. '
  13. 'THOUGHT FOR THE DAY: Neurotics Build Castles In The Air........ 
  14. '                     Psycotics Live In Castles In The Air...... 
  15. '                     Psychiatrists...They Charge Rent.  
  16. '
  17. '
  18. '     Plonk! I'm back... I'm very busy at the moment and as a result I   
  19. ' haven't bothered to comment this. I am however currently writing what  
  20. ' I hope will turn out to be a usefull set of notes on 3D GFX etc for  
  21. ' your entertainment, they should be ready for the May TOTALLY AMOS disk, but if you     
  22. ' can't wait that long then either go down the library or get a subscription 
  23. ' to ALL ABOUT AMOS from........   
  24. '  
  25. '
  26. '            Peter Hickman "All About Amos",     
  27. '            36 Cleverly Estate,   
  28. '            Wormholt Road,
  29. '            London. 
  30. '            W12 0LX 
  31. '
  32. '            TEL: 081 749 6086 - Office Hours Only 
  33. '
  34. '
  35. '    2 Books On Computer Graphics That I Would Recomend Are:   
  36. '  
  37. '
  38. '    1] Computer Graphics - Principles And Practice by:  
  39. '
  40. '       James Foley    - The George Washingthon University 
  41. '       Andres Van Dam - Brown University
  42. '       Steven Feiner  - Columbia University   
  43. '       John Hughes    - Brown University  
  44. '
  45. '       Published by: Addison-Wesley   
  46. '
  47. '       ISBN 0-201-12110-7 
  48. '
  49. '
  50. '    2] Fundamentals Of Three-Dimentional Computer Graphics by:  
  51. '
  52. '       Alan Watt      - University Of Sheffield   
  53. '
  54. '       Published by: Addison-Wesley 
  55. '          
  56. '       ISBN 0-201-15442-0 
  57. '  
  58. '
  59. ' BOTH THESE BOOKS ARE EXCELLENT BUT WILL SERIOUSLY DAMAGE YOUR BANK ACCOUNT!  
  60. '
  61. '
  62. '
  63. '     STOP PRESS! STOP PRESS! SKIDz he who is ravi'n mad has just signed an    
  64. ' agreement (in blood) to provide some examples and a set of docs on how to  
  65. ' use AMOS 3D so if you are having problems with that then get a copy of the 
  66. ' May disk and all will be revealed. 
  67. '
  68. '
  69. '     What am I doing.... well I have a few things under development at    
  70. ' the moment like, vu meters (special ones), the runner (wait & see), menus, 
  71. ' vector balls. However this is your magazine and what you want is what counts 
  72. ' so write to Len & Anne and have your say. 'Nough said. 
  73. '
  74. ' My Address:              Uncle Simes 
  75. '                          The Warehouse,
  76. '                          118 Hiltingbury Rd, 
  77. '                          Chandlers Ford, 
  78. '                          Eastleigh,
  79. '                          Hants.
  80. '                          SO5 1NT.
  81. '
  82. '       * PLEASE INCLUDE RETURN POSTAGE IF YOU WANT A REPLY! * 
  83. '  
  84. '
  85. '===================================================================   
  86. '      * DATA SECTION (YEUCH BOLOC! (anag)) VARIABLES ETC *  
  87. '=================================================================== 
  88. '
  89. '
  90. Dir$="SIMES_PROGS1:"
  91. Close Workbench 
  92. Close Editor 
  93. Screen Close 0
  94. '
  95. NUM_OF_POINTS=5
  96. NUM_OF_LINES=5
  97. CENTER_X=160
  98. CENTER_Y=90
  99. DISTANCE#=150
  100. TRANS_X=0 : TRANS_Y=0 : TRANS_Z=0
  101. ROTATE_X=0 : ROTATE_Y=0 : ROTATE_Z=0
  102. SCALE_X#=1 : SCALE_Y#=1 : SCALE_Z#=1
  103. '
  104. Dim IMAGE_X(NUM_OF_POINTS),IMAGE_Y(NUM_OF_POINTS),IMAGE_Z(NUM_OF_POINTS)
  105. Dim PNT_X(NUM_OF_POINTS),PNT_Y(NUM_OF_POINTS)
  106. Dim LINE_A(NUM_OF_LINES),LINE_B(NUM_OF_LINES)
  107. '
  108. Global NUM_OF_POINTS,NUM_OF_LINES,DISTANCE#,CENTER_X,CENTER_Y
  109. Global IMAGE_X(),IMAGE_Y(),IMAGE_Z()
  110. Global PNT_X(),PNT_Y()
  111. Global LINE_A(),LINE_B()
  112. '
  113. '===================================================================   
  114. '                       * MODULE LEVEL CODE *
  115. '=================================================================== 
  116. '
  117. INITIALISE
  118. MAIN
  119. End 
  120. '
  121. '=================================================================== 
  122. '                      * PROCEDURE LEVEL CODE *
  123. '=================================================================== 
  124. '
  125. Procedure MAIN
  126.    Shared ROTATE_X,ROTATE_Y,ROTATE_Z,TRANS_X,TRANS_Y,TRANS_Z,SCALE_X#,SCALE_Y#,SCALE_Z#
  127.    Screen Show 0
  128.    Repeat 
  129.       Add ROTATE_X,4,0 To 359
  130.       Add ROTATE_Y,8,0 To 359
  131.       Add ROTATE_Z,-12,0 To 359
  132.       IMAGE_CALC[ROTATE_X,ROTATE_Y,ROTATE_Z,TRANS_X,TRANS_Y,TRANS_Z,SCALE_X#,SCALE_Y#,SCALE_Z#]
  133.       IMAGE_DRAW[CENTER_X,CENTER_Y]
  134.       Screen Swap 
  135.       Wait Vbl 
  136.       Cls 0
  137.    Until Mouse Key=1
  138.    Rainbow Del 
  139.    Bob Off 
  140.    Screen Close 0
  141.    Erase 1
  142.    MUZAK_DOWN
  143. End Proc
  144. '
  145. Procedure INITIALISE
  146.    MUZAK_UP["MUSIC/TOXIC_MUZAK.ABK",18]
  147.    Degree 
  148.    Screen Open 0,320,180,4,0
  149.    Screen Hide 0
  150.    Screen Display 0,128,100,320,180
  151.    SET_SCREEN
  152.    Palette $0,$FFF,$0,$0
  153.    Double Buffer 
  154.    Screen Swap 
  155.    FLOOR_RBOW
  156.    Autoback 0
  157.    For LOP=1 To NUM_OF_POINTS
  158.       Read IMAGE_X(LOP),IMAGE_Y(LOP),IMAGE_Z(LOP)
  159.    Next LOP
  160.    For LOP=1 To NUM_OF_LINES
  161.       Read LINE_A(LOP),LINE_B(LOP)
  162.    Next LOP
  163.    '
  164.    ' Point Data 
  165.    '
  166.    Data -40,-40,20
  167.    Data 40,-40,20
  168.    Data 40,40,-20
  169.    Data -40,40,-20
  170.    Data 0,0,0
  171.    '
  172.    ' Line Data
  173.    '
  174.    Data 1,2,2,3
  175.    Data 3,4,4,1
  176.    Data 5,5
  177. End Proc
  178. '
  179. Procedure IMAGE_CALC[ROTATE_X,ROTATE_Y,ROTATE_Z,TRANS_X,TRANS_Y,TRANS_Z,SCALE_X#,SCALE_Y#,SCALE_Z#]
  180.    _SINE_X#=Sin(ROTATE_X)
  181.    _SINE_Y#=Sin(ROTATE_Y)
  182.    _SINE_Z#=Sin(ROTATE_Z)
  183.    CO_SINE_X#=Cos(ROTATE_X)
  184.    CO_SINE_Y#=Cos(ROTATE_Y)
  185.    CO_SINE_Z#=Cos(ROTATE_Z)
  186.    '
  187.    For _POINTS=1 To NUM_OF_POINTS
  188.       '
  189.       XPOS=IMAGE_X(_POINTS)*SCALE_X#
  190.       YPOS=IMAGE_Y(_POINTS)*SCALE_Y#
  191.       ZPOS=IMAGE_Z(_POINTS)*SCALE_Z#
  192.       '
  193.       XPOS1#=XPOS*CO_SINE_Z#-YPOS*_SINE_Z#
  194.       YPOS1#=XPOS*_SINE_Z#+YPOS*CO_SINE_Z#
  195.       ZPOS1#=ZPOS
  196.       '
  197.       XPOS2#=XPOS1#*CO_SINE_Y#-ZPOS1#*_SINE_Y#
  198.       YPOS2#=YPOS1#
  199.       ZPOS2#=XPOS1#*_SINE_Y#+ZPOS1#*CO_SINE_Y#
  200.       '
  201.       XPOS3#=XPOS2#
  202.       YPOS3#=YPOS2#*CO_SINE_X#+ZPOS2#*_SINE_X#
  203.       XPOS3#=ZPOS2#*CO_SINE_X#-YPOS2#*_SINE_X#
  204.       '
  205.       XPOS4#=XPOS3#+TRANS_X
  206.       YPOS4#=YPOS3#-TRANS_Y
  207.       ZPOS4#=ZPOS4#-TRANS_Z
  208.       '
  209.       PERSPECTIVE#=ZPOS4#+DISTANCE#
  210.       If PERSPECTIVE#=0 Then PERSPECTIVE#=1
  211.       XPOS#=XPOS4#*(DISTANCE#/PERSPECTIVE#)
  212.       YPOS#=YPOS4#*(DISTANCE#/PERSPECTIVE#)
  213.       '
  214.       PNT_X(_POINTS)=XPOS#
  215.       PNT_Y(_POINTS)=YPOS#
  216.    Next _POINTS
  217. End Proc
  218. '
  219. Procedure IMAGE_DRAW[CENT_X,CENT_Y]
  220.    Ink 1
  221.    For LINES=1 To NUM_OF_LINES-1
  222.       PNT_A=LINE_A(LINES)
  223.       PNT_B=LINE_B(LINES)
  224.       Draw PNT_X(PNT_A)+CENT_X,PNT_Y(PNT_A)+CENT_Y To PNT_X(PNT_B)+CENT_X,PNT_Y(PNT_B)+CENT_Y
  225.    Next LINES
  226.    Ink 2
  227.    PNT_A=LINE_A(5)
  228.    PNT_B=LINE_B(5)
  229.    Paint PNT_X(PNT_A)+CENT_X,PNT_Y(PNT_A)+CENT_Y
  230. End Proc
  231. '
  232. Procedure SET_SCREEN
  233.    Flash Off 
  234.    Curs Off 
  235.    Hide On 
  236.    Cls 0
  237. End Proc
  238. '
  239. Procedure MUZAK_UP[NAME$,TMPO]
  240.    Load Dir$+NAME$
  241.    Wait 1
  242.    Mvolume 0
  243.    Music 1
  244.    Led Off 
  245.    Tempo TMPO
  246.    For VOL=0 To 63
  247.       Wait 6
  248.       Mvolume VOL
  249.    Next VOL
  250. End Proc
  251. '
  252. Procedure MUZAK_DOWN
  253.    For M=63 To 0 Step -1
  254.       Wait 5
  255.       Mvolume M
  256.    Next M
  257.    Music Off 
  258.    Erase 3
  259. End Proc
  260. '
  261. Procedure FLOOR_RBOW
  262.    Set Rainbow 0,2,180,"","",""
  263.    Rainbow 0,0,115,180
  264.    Colour Back 0
  265.    Restore RDATA
  266.    For C=0 To 179
  267.        Read CVA
  268.        Rain(0,C)=CVA
  269.    Next C
  270.    View 
  271.    RDATA:
  272.    Data $0,$0,$0,$0,$0,$0,$0,$0
  273.    Data $0,$0,$0,$0,$0,$0,$D5F,$D5F
  274.    Data $D5F,$D5F,$C5F,$C5F,$C5F,$C5F,$B5F,$B5F
  275.    Data $B5F,$B5F,$A5F,$A5F,$A5F,$A5F,$95F,$95F
  276.    Data $95F,$95F,$85F,$85F,$85F,$85F,$75F,$75F
  277.    Data $75F,$75F,$65F,$65F,$65F,$66F,$66F,$66F
  278.    Data $67F,$67F,$67F,$68F,$68F,$68F,$69F,$69F
  279.    Data $69F,$6AF,$6AF,$6AF,$6BF,$6BF,$6BF,$6CF
  280.    Data $6CF,$6CF,$6DF,$6DF,$6DF,$6EF,$6EF,$6EF
  281.    Data $6FF,$6FF,$6FF,$6DF,$6DF,$6DF,$6CF,$6CF
  282.    Data $6CF,$6BF,$6BF,$6BF,$6AF,$6AF,$69F,$69F
  283.    Data $69F,$68F,$68F,$68F,$67F,$67F,$67F,$66F
  284.    Data $66F,$66F,$65F,$65F,$65F,$64F,$64F,$64F
  285.    Data $63F,$63F,$63F,$73F,$73F,$73F,$83F,$83F
  286.    Data $83F,$93F,$93F,$93F,$A3F,$A3F,$A3F,$B3F
  287.    Data $B3F,$C3F,$C3F,$C3F,$C3F,$D3F,$D3F,$D3F
  288.    Data $E3F,$E3F,$E3F,$F3F,$F3F,$F3F,$F5F,$F5F
  289.    Data $F5F,$F6F,$F6F,$F6F,$F7F,$F7F,$F7F,$F8F
  290.    Data $F8F,$F8F,$F9F,$F9F,$F9F,$FAF,$FAF,$FAF
  291.    Data $FBF,$FBF,$FBF,$FCF,$FCF,$FCF,$FDF,$FDF
  292.    Data $FDF,$FDF,$FDF,$FDF,$FDF,$FCF,$FCF,$FCF
  293.    Data $FBF,$FBF,$FBF,$FAF,$FAF,$FAF,$F9F,$F9F
  294.    Data $F9F,$F8F,$F8F,$F8F,$F7F,$F7F,$F7F,$F6F
  295. End Proc