home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 594b.lha / VectorLibrary / Basic / vd_rot < prev    next >
Text File  |  1991-11-09  |  11KB  |  517 lines

  1. '***************************************
  2. '*                                     *
  3. '* Basic-Demo for vector.library V1.6x *
  4. '*                                     *
  5. '* ©1991 by Alexander Lippert          *
  6. '*                                     *
  7. '* All object-design done by           *
  8. '*   Oliver Hahn ©1991                 *
  9. '*                                     *
  10. '***************************************
  11.  
  12. LIBRARY "exec.library"
  13. LIBRARY "vector.library"
  14.  
  15. DECLARE FUNCTION AllocMem& LIBRARY
  16. DECLARE FUNCTION FreeMem& LIBRARY
  17.  
  18. DECLARE FUNCTION SetVBI& LIBRARY
  19. DECLARE FUNCTION InitVBOBs& LIBRARY
  20. DECLARE FUNCTION OpenVScreen& LIBRARY
  21. DECLARE FUNCTION CloseVScreen& LIBRARY
  22. DECLARE FUNCTION UseJoy& LIBRARY
  23. DECLARE FUNCTION DoAnim& LIBRARY
  24. DECLARE FUNCTION FreeVBOBs& LIBRARY
  25. DECLARE FUNCTION AutoScaleOn& LIBRARY
  26. DECLARE FUNCTION AutoScaleOff& LIBRARY
  27. DECLARE FUNCTION FreeJoy& LIBRARY
  28. DECLARE FUNCTION SetColors& LIBRARY
  29.  
  30. fmem&=65537&   ' Flags fuer FastMem
  31. cmem&=65539&   ' Flags fuer ChipMem
  32.  
  33. OPEN "vd_rot.asm" FOR INPUT AS 1  ' Assembler-Code laden  (auf Pfad achten!!)
  34. VBIProg&=AllocMem&(LOF(1),fmem&)
  35. Code$=INPUT$(LOF(1),1)
  36. CLOSE 1
  37. FOR i=1 TO LEN(Code$)-32
  38.   POKE VBIProg&+i-1,ASC(MID$(Code$,i+32,1))
  39. NEXT i
  40.  
  41. RESTORE NewVScreen ' Zeiger auf NewVScreen
  42. GOSUB OpenVScreen  ' VScreen öffnen
  43.  
  44. RESTORE ColorTab ' Zeiger auf Farb-Tabelle
  45. GOSUB SetColors  ' Farben setzen
  46.  
  47. RESTORE BOBList  ' Zeiger auf BOBListe
  48. GOSUB InitVBOBs  ' VBOBs initialisieren
  49.  
  50. res=AutoScaleOn&(PEEKW(nsm&+12)) ' Entzerrung fuer höhrerr Auflösungen
  51.  
  52. RESTORE JoyStruct ' Zeiger auf Joystick-Struktur
  53. 'GOSUB UseJoy      ' Joystick nicht benutzen
  54.  
  55. RESTORE PointTab
  56. GOSUB MakePointTab ' Punkt-Tabelle anlegen
  57.  
  58. res=SetVBI&(VBIProg&)  ' AssemblerCode der Bibliothek bergeben
  59.  
  60. RESTORE AreaTab
  61. GOSUB MakeAreaTab ' Flächen-Tabelle anlegen
  62.  
  63. RESTORE MoveTab
  64. GOSUB MakeMoveTab ' Bewegungs-Tabelle anlegen
  65.  
  66. RESTORE ObjectStruct
  67. GOSUB MakeObjectStruct ' Object-Struktur anlegen
  68.  
  69. RESTORE WorldStruct
  70. GOSUB MakeWorldStruct ' Welt-Struktur anlegen
  71.  
  72. res=DoAnim&(world&) ' Animation der Körper
  73.  
  74.  
  75. res=CloseVScreen& ' Screen schließen
  76.  
  77. 'res=FreeJoy&    ' nur, wenn zuvor
  78. 'res=FreeMem&(joy&,12&) ' UseJoy& erfolgte
  79.  
  80. res=FreeVBOBs  ' nur, wenn zuvor
  81. res=FreeMem&(bobs&,bobsize&) ' InitVBOBs& erfolgte
  82.  
  83. res=FreeMem&(nsm&,34&)  ' von Strukturen belegten
  84. res=FreeMem&(coltab&,8*64+2&) ' Speicher freigeben
  85. res=FreeMem&(world&,wdsize&) ' ...
  86. res=FreeMem&(object&,26&)
  87. res=FreeMem&(movetb&,1000&)
  88. res=FreeMem&(areatb&,arsize&)
  89. res=FreeMem&(pointtb&,ptsize&)
  90. res=FreeMem&(VBIProg&,LEN(Code$))
  91. LIBRARY CLOSE
  92.  
  93. END
  94.  
  95.  
  96. NewVScreen:
  97.   ' Offset von links oben
  98.  DATA 0,0
  99.   ' Ausdehnung des Screen
  100.  DATA 320,256
  101.   ' Tiefe des Screen
  102.  DATA 3
  103.   ' Farben der Titel-Leiste      
  104.  DATA 0,0 
  105.   ' ViewModes (&H8000 HiRes, &H4 Lace)
  106.  DATA 0
  107.   ' Zeiger auf Font und Title
  108.  DATA 0,0
  109.   ' Flags (z.Z. unbelegt)
  110.  DATA 0
  111.   ' Offset der Vektor-Graphik im Screen (z.Z. unbelegt)
  112.  DATA 0,0
  113.   ' Ausdehnung der Vector-Graphik (muß z.Z. Ausdehnung des Screens entsprechen) 
  114.  DATA 320,256
  115.   ' Tife der Vektor-Graphik
  116.  DATA 3
  117.  
  118.  
  119. WorldStruct:
  120.   ' Flags (1 fuer Drahtgitter), Anzahl der Objekte
  121.  DATA 0,1
  122.   ' Zeiger auf Objekte (werden von MakeWorldStruct eingetragen)
  123.  DATA 0
  124.  
  125.  
  126. ObjectStruct: ' Fuer jedes Objekt eine eigene!
  127.   ' Zeiger auf Punk-Tabelle, Flächen-Tabelle, Bewegungs-Tabelle (werden von MakeObjectStruct eingetragen)
  128.  DATA 0,0,0
  129.   ' Flags (z.Z. unbelegt)
  130.  DATA 0
  131.   ' Start-Position
  132.  DATA 0,0,-14500
  133.   ' Start-Rotation
  134.  DATA 0,0,0
  135.  
  136.  
  137. MoveTab:
  138.   ' Ticks, movx,movy,movz, rotx,roty,rotz
  139.  DATA 210,0,0,60,2,1,0
  140.   ' label
  141.  DATA -3
  142.  DATA 90,0,0,0,2,1,0
  143.   ' goto label  8 mal
  144.  DATA -4,8
  145.  DATA 210,0,0,-60,2,1,0
  146.  DATA -1
  147.  
  148.  
  149. ColorTab:
  150.  ' Register, Rot, Gruen, Blau
  151.  DATA 0, 0,0,0
  152.  DATA 1, 0,10,0
  153.  DATA 2, 0,8,0
  154.  DATA 3, 0,0,12
  155.  DATA 4, 0,0,10
  156.  DATA 5, 10,0,10
  157.  DATA 6, 8,0,8
  158.  DATA 7, 0,0,15
  159.  DATA -1
  160.  
  161.  
  162. JoyStruct:
  163.   ' Z-Geschwindigkeit, Vordere Grenze, Hintere Grenze
  164.  DATA 20,-300,-16000
  165.   ' Rotations-Geschwindigkeit um x,y,z-Achse
  166.  DATA 1,1,1
  167.  
  168.  
  169. BOBList:
  170.   ' Anzahl der VBOBs
  171.  DATA 16
  172.   ' Breite in Worten, Höhe, Reserved, Reserved
  173.  DATA 2,31,0,0
  174.  DATA 2,29,0,0
  175.  DATA 2,27,0,0
  176.  DATA 2,25,0,0
  177.  DATA 2,23,0,0
  178.  DATA 2,21,0,0
  179.  DATA 2,19,0,0
  180.  DATA 2,17,0,0
  181.  DATA 1,15,0,0
  182.  DATA 1,13,0,0
  183.  DATA 1,11,0,0
  184.  DATA 1,9,0,0
  185.  DATA 1,7,0,0
  186.  DATA 1,5,0,0
  187.  DATA 1,3,0,0
  188.  DATA 1,1,0,0
  189.   
  190.  
  191. PointTab: ' Punkt-Tabelle, wird vom Assembler-Programm
  192.           ' ergänzt und mutiert
  193.   ' Anzahl der Punkte eines Objekts
  194.  DATA 48
  195.   ' x,y,z-Koordinate, Eigengröße fuer VBOBs
  196.  DATA -30,192,0,0
  197.  DATA 0,0,0,0
  198.  DATA 0,0,0,0
  199.  DATA 0,0,0,0
  200.  DATA 0,0,0,0
  201.  DATA 0,0,0,0
  202.  DATA 0,0,0,0
  203.  DATA 0,0,0,0
  204.  DATA -60,120,0,0
  205.  DATA 0,0,0,0
  206.  DATA 0,0,0,0
  207.  DATA 0,0,0,0
  208.  DATA 0,0,0,0
  209.  DATA 0,0,0,0
  210.  DATA 0,0,0,0
  211.  DATA 0,0,0,0
  212.  DATA -192,24,0,0
  213.  DATA 0,0,0,0
  214.  DATA 0,0,0,0
  215.  DATA 0,0,0,0
  216.  DATA 0,0,0,0
  217.  DATA 0,0,0,0
  218.  DATA 0,0,0,0
  219.  DATA 0,0,0,0
  220.  DATA -192,-24,0,0
  221.  DATA 0,0,0,0
  222.  DATA 0,0,0,0
  223.  DATA 0,0,0,0
  224.  DATA 0,0,0,0
  225.  DATA 0,0,0,0
  226.  DATA 0,0,0,0
  227.  DATA 0,0,0,0
  228.  DATA -60,-120,0,0
  229.  DATA 0,0,0,0
  230.  DATA 0,0,0,0
  231.  DATA 0,0,0,0
  232.  DATA 0,0,0,0
  233.  DATA 0,0,0,0
  234.  DATA 0,0,0,0
  235.  DATA 0,0,0,0
  236.  DATA -30,-192,0,0
  237.  DATA 0,0,0,0
  238.  DATA 0,0,0,0
  239.  DATA 0,0,0,0
  240.  DATA 0,0,0,0
  241.  DATA 0,0,0,0
  242.  DATA 0,0,0,0
  243.  DATA 0,0,0,0
  244.  
  245.  
  246. AreaTab:  ' Flächen-Tabelle
  247.   ' Anzahl der Flächen eines Objekts
  248.  DATA 42
  249.   ' Eckenzahl oder Kennung, Farb-Nummer, Eckpunkte (max. 8)
  250.  DATA 8,7,0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4,0*4
  251.  DATA 8,7,47*4,46*4,45*4,44*4,43*4,42*4,41*4,40*4,47*4
  252.  
  253.  DATA 4,3,40*4,41*4,33*4,32*4,40*4,0,0,0,0
  254.  DATA 4,4,41*4,42*4,34*4,33*4,41*4,0,0,0,0
  255.  DATA 4,3,42*4,43*4,35*4,34*4,42*4,0,0,0,0
  256.  DATA 4,4,43*4,44*4,36*4,35*4,43*4,0,0,0,0
  257.  DATA 4,3,44*4,45*4,37*4,36*4,44*4,0,0,0,0
  258.  DATA 4,4,45*4,46*4,38*4,37*4,45*4,0,0,0,0
  259.  DATA 4,3,46*4,47*4,39*4,38*4,46*4,0,0,0,0
  260.  DATA 4,4,47*4,40*4,32*4,39*4,47*4,0,0,0,0
  261.  
  262.  DATA 4,3,8*4,9*4,1*4,0*4,8*4,0,0,0,0
  263.  DATA 4,4,9*4,10*4,2*4,1*4,9*4,0,0,0,0
  264.  DATA 4,3,10*4,11*4,3*4,2*4,10*4,0,0,0,0
  265.  DATA 4,4,11*4,12*4,4*4,3*4,11*4,0,0,0,0
  266.  DATA 4,3,12*4,13*4,5*4,4*4,12*4,0,0,0,0
  267.  DATA 4,4,13*4,14*4,6*4,5*4,13*4,0,0,0,0
  268.  DATA 4,3,14*4,15*4,7*4,6*4,14*4,0,0,0,0
  269.  DATA 4,4,15*4,8*4,0*4,7*4,15*4,0,0,0,0
  270.  
  271.  DATA 4,2,16*4,17*4,9*4,8*4,16*4,0,0,0,0
  272.  DATA 4,1,17*4,18*4,10*4,9*4,17*4,0,0,0,0
  273.  DATA 4,2,18*4,19*4,11*4,10*4,18*4,0,0,0,0
  274.  DATA 4,1,19*4,20*4,12*4,11*4,19*4,0,0,0,0
  275.  DATA 4,2,20*4,21*4,13*4,12*4,20*4,0,0,0,0
  276.  DATA 4,1,21*4,22*4,14*4,13*4,21*4,0,0,0,0
  277.  DATA 4,2,22*4,23*4,15*4,14*4,22*4,0,0,0,0
  278.  DATA 4,1,23*4,16*4,8*4,15*4,23*4,0,0,0,0
  279.  
  280.  DATA 4,5,24*4,25*4,17*4,16*4,24*4,0,0,0,0
  281.  DATA 4,6,25*4,26*4,18*4,17*4,25*4,0,0,0,0
  282.  DATA 4,5,26*4,27*4,19*4,18*4,26*4,0,0,0,0
  283.  DATA 4,6,27*4,28*4,20*4,19*4,27*4,0,0,0,0
  284.  DATA 4,5,28*4,29*4,21*4,20*4,28*4,0,0,0,0
  285.  DATA 4,6,29*4,30*4,22*4,21*4,29*4,0,0,0,0
  286.  DATA 4,5,30*4,31*4,23*4,22*4,30*4,0,0,0,0
  287.  DATA 4,6,31*4,24*4,16*4,23*4,31*4,0,0,0,0
  288.  
  289.  DATA 4,2,32*4,33*4,25*4,24*4,32*4,0,0,0,0
  290.  DATA 4,1,33*4,34*4,26*4,25*4,33*4,0,0,0,0
  291.  DATA 4,2,34*4,35*4,27*4,26*4,34*4,0,0,0,0
  292.  DATA 4,1,35*4,36*4,28*4,27*4,35*4,0,0,0,0
  293.  DATA 4,2,36*4,37*4,29*4,28*4,36*4,0,0,0,0
  294.  DATA 4,1,37*4,38*4,30*4,29*4,37*4,0,0,0,0
  295.  DATA 4,2,38*4,39*4,31*4,30*4,38*4,0,0,0,0
  296.  DATA 4,1,39*4,32*4,24*4,31*4,39*4,0,0,0,0
  297.  
  298.  
  299. OpenVScreen:
  300. nsm&=AllocMem&(34&,fmem&)
  301.  
  302. READ leftedge,topedge,widt,height,depth,detailpen
  303. READ blockpen,viewmodes,a,a
  304. READ vwflags,vwleftedge,vwtopedge,vwwidt
  305. READ vwheight,vwdepth
  306.  
  307. POKEW nsm&,leftedge  ' NewVScreen-Struktur anlegen
  308. POKEW nsm&+2,topedge
  309. POKEW nsm&+4,widt
  310. POKEW nsm&+6,height
  311. POKEW nsm&+8,depth
  312. POKE  nsm&+10,detailpen
  313. POKE  nsm&+11,blockpen
  314. POKEW nsm&+12,viewmodes
  315. POKEL nms&+14,font
  316. POKEL nsm&+18,SADD("vector.library V1.67 ©91 by A.Lippert"+CHR$(0))
  317. POKEW nsm&+22,vwflags
  318. POKEW nsm&+24,vwleftedge
  319. POKEW nsm&+26,vwtopedge
  320. POKEW nsm&+28,vwwidt
  321. POKEW nsm&+30,vwheight
  322. POKEW nsm&+32,vwdepth
  323.  
  324. viewstruct&=OpenVScreen&(nsm&) ' Bibliothek aufrufen
  325.  
  326. RETURN
  327.  
  328.  
  329. SetColors:
  330. coltab&=AllocMem&(8*64+2&,fmem&) ' fuer max. 64 Farben speicher allokieren
  331. ct=coltab&
  332.  
  333. READ reg
  334.  
  335. WHILE reg<>-1 ' Farb-Tabelle anlegen
  336.  READ r,g,b
  337.  POKEW ct,reg
  338.  POKEW ct+2,r
  339.  POKEW ct+4,g
  340.  POKEW ct+6,b
  341.  READ reg
  342.  ct=ct+8
  343. WEND
  344. POKEW ct,-1
  345.  
  346. res=SetColors&(viewstruct&,coltab&) ' Bibliothek aufrufen
  347.  
  348. RETURN
  349.  
  350.  
  351. MakePointTab:
  352. READ ptnum
  353. ptsize&=ptnum*8+2
  354. pointtb&=AllocMem&(ptsize&,fmem&)
  355.  
  356. pt=pointtb&
  357.  
  358. POKEW pt,ptnum
  359. pt=pt+2
  360.  
  361. FOR i=1 TO ptnum ' Punkt-Tabelle anlegen
  362.  READ x,y,z,ps
  363.  POKEW pt,x
  364.  POKEW pt+2,y
  365.  POKEW pt+4,z
  366.  POKEW pt+6,ps
  367.  pt=pt+8
  368. NEXT i
  369.  
  370. POKEL VBIProg&+176,pointtb&+2  ' AssemblerCode einen Zeiger bergeben
  371.  
  372. RETURN
  373.  
  374.  
  375. MakeAreaTab:
  376. READ arnum
  377. arsize&=arnum*22+2
  378. areatb&=AllocMem&(arsize&,fmem&)
  379.  
  380. ar=areatb&
  381.  
  382. POKEW ar,arnum
  383. ar=ar+2
  384.  
  385. FOR i=1 TO arnum ' Flächen-Tabelle anlegen
  386.  READ ptnum,col,pt1$,pt2$,pt3$,pt4$,pt5$,pt6$,pt7$,pt8$,pt9$
  387.  POKEW ar,ptnum
  388.  POKEW ar+2,col
  389.  POKEW ar+4,VAL(pt1$)*4
  390.  POKEW ar+6,VAL(pt2$)*4
  391.  POKEW ar+8,VAL(pt3$)*4
  392.  POKEW ar+10,VAL(pt4$)*4
  393.  POKEW ar+12,VAL(pt5$)*4
  394.  POKEW ar+14,VAL(pt6$)*4
  395.  POKEW ar+16,VAL(pt7$)*4
  396.  POKEW ar+18,VAL(pt8$)*4
  397.  POKEW ar+20,VAL(pt9$)*4
  398.  ar=ar+22
  399. NEXT i
  400.  
  401. RETURN
  402.  
  403.  
  404. MakeMoveTab:
  405. movetb&=AllocMem&(1000&,fmem&) ' 1000 Bytes fr Bewegungs-Tabelle allokieren (mehr als ausreichend)
  406.  
  407. mv=movetb&
  408.  
  409. mvtabbeg:
  410. READ ticks
  411.  
  412. WHILE ticks => 0 ' Bewegungs-Tabelle anlegen
  413.  POKEW mv,ticks
  414.  READ movx,movy,movz,rotx,roty,rotz
  415.  POKEW mv+2,movx
  416.  POKEW mv+4,movy
  417.  POKEW mv+6,movz
  418.  POKEW mv+8,rotx
  419.  POKEW mv+10,roty
  420.  POKEW mv+12,rotz
  421.  READ ticks
  422.  mv=mv+14 
  423. WEND
  424.  
  425. IF ticks=-1 OR ticks = -2 THEN POKEW mv,ticks : GOTO mvtabend
  426.  
  427. IF ticks=-3 THEN POKEW mv,ticks : mv=mv+2 : GOTO mvtabbeg
  428. IF ticks=-4 THEN POKEW mv,ticks : READ count : POKEW mv+2,count : mv=mv+4 : GOTO mvtabbeg
  429.  
  430. mvtabend:
  431. RETURN
  432.  
  433.  
  434. MakeObjectStruct:
  435. READ a,a,a
  436.  
  437. object&=AllocMem&(26&,fmem&)
  438.  
  439. READ flags,posx,posy,posz,rotx,roty,rotz
  440.  
  441. POKEL object&,pointtb&  ' Object-Struktur anlegen
  442. POKEL object&+4,areatb&
  443. POKEL object&+8,movetb&
  444. POKEW object&+12,flags
  445. POKEW object&+14,posx
  446. POKEW object&+16,posy
  447. POKEW object&+18,posz
  448. POKEW object&+20,rotx
  449. POKEW object&+22,roty
  450. POKEW object&+24,rotz
  451.  
  452. RETURN
  453.  
  454.  
  455. MakeWorldStruct:
  456. READ flags
  457. READ obnum
  458.  
  459. wdsize&=obnum*4+4
  460. world&=AllocMem&(wdsize&,fmem&)
  461.  
  462. wd=world&
  463.  
  464. POKEW wd,flags ' Welt-Struktur anlegen
  465. POKEW wd+2,obnum
  466.  
  467. wd=wd+4
  468.  
  469. READ a           ' Diese Sequenz muß fr jedes
  470. POKEL wd,object& ' Objekt erfolgen
  471.  
  472. RETURN
  473.  
  474.  
  475. UseJoy:
  476. joy&=AllocMem&(12&,fmem&)
  477. READ movz,borderfront,borderback,rotx,roty,rotz
  478.  
  479. POKEW joy&,movz  ' Joystick-Struktur poken
  480. POKEW joy&+2,borderfront
  481. POKEW joy&+4,borderback
  482. POKEW joy&+6,rotx
  483. POKEW joy&+8,roty
  484. POKEW joy&+10,rotz
  485.  
  486. res=UseJoy&(0&,joy&) ' Bibliothek aufrufen
  487.  
  488. RETURN
  489.  
  490.  
  491. InitVBOBs:
  492. READ bobnum
  493.  
  494. bobsize&=bobnum*12+2
  495. bobs&=AllocMem&(bobsize&,fmem&)
  496.  
  497. bb=bobs&
  498.  
  499. POKEW bb,bobnum
  500.  
  501. bb=bb+2
  502.  
  503. FOR i=1 TO bobnum ' BOBListe anlegen
  504.  READ widt,height,a,a
  505.  POKEW bb,widt
  506.  POKEW bb+2,height
  507.  POKEL bb+4,a
  508.  POKEL bb+8,a
  509.  bb=bb+12
  510. NEXT
  511.  
  512. ' Im folgenden Bibliotheksaufruf ist der Name des VBOB-Satzes enthalten (Pfad nicht vergessen!)
  513. nam$="VBOBs:bs1lo3_??.gfx"+CHR$(0)
  514. res=InitVBOBs&(PEEKW(nsm&+32),SADD(nam$),bobs&,0&)
  515.  
  516. RETURN
  517.