home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 594b.lha / VectorLibrary / Cprg / vd_rot.c < prev    next >
C/C++ Source or Header  |  1991-11-09  |  12KB  |  443 lines

  1. /*************************************/
  2. /*                                   */
  3. /*   Demo for vector.library V1.6x   */
  4. /*                                   */
  5. /* Programming by Jürgen Koch        */
  6. /*                                   */
  7. /* in Sep-1991                       */
  8. /*                                   */
  9. /*************************************/
  10.  
  11.  
  12. #include <stdio.h>
  13. #include <exec/types.h>
  14. #include <intuition/intuition.h>
  15. #define BOB_NUM 1      /* Anzahl der verwendeten VBOBs (muß mind. 1 betragen) */
  16. #include <vector.h>
  17.  
  18. struct VecBase *VecBase;
  19.  
  20.  
  21.  
  22. struct NewVScreen MyVScreen=
  23.   {
  24.    0,0,     /* Linke obere Ecke des Screen */
  25.    320,256, /* Breite und Höhe */
  26.    3,       /* Tiefe */
  27.    0,0,     /* Screentitel- und -randfarben */
  28.    0,       /* Screenmode */
  29.    NULL,    /* Zeiger auf Font des Screens; hier Standard-Font */
  30.    "vector.library  ©1991 by A.Lippert",
  31.    0,       /* Flags (bisher ungenutzt) */
  32.    0,0,     /* Offset des Vektorfensters im Screen (bisher nicht unterstützt) */
  33.    320,256, /* Breite und Höhe des Vektorfensters (muß bisher identisch sein mit Breite und Höhe des Screens) */
  34.    3        /* von Vektoranimation wirklich genutzte Bitplanes */
  35.   };
  36.  
  37. struct Joy MyJoy=
  38.  {
  39.   50,-1000,-16000,
  40.   3,3,3
  41.  };
  42.  
  43.  
  44. WORD ObjectPoints[]=  /* Tabelle wird vom Assembler-Teil vervollständigt */
  45.   {
  46.    6*8,
  47.     -30, 192,   0,0,
  48.       0,   0,   0,0,
  49.       0,   0,   0,0,
  50.       0,   0,   0,0,
  51.       0,   0,   0,0,
  52.       0,   0,   0,0,
  53.       0,   0,   0,0,
  54.       0,   0,   0,0,
  55.     -60, 120,   0,0,
  56.       0,   0,   0,0,
  57.       0,   0,   0,0,
  58.       0,   0,   0,0,
  59.       0,   0,   0,0,
  60.       0,   0,   0,0,
  61.       0,   0,   0,0,
  62.       0,   0,   0,0,
  63.    -192,  24,   0,0,
  64.       0,   0,   0,0,
  65.       0,   0,   0,0,
  66.       0,   0,   0,0,
  67.       0,   0,   0,0,
  68.       0,   0,   0,0,
  69.       0,   0,   0,0,
  70.       0,   0,   0,0,
  71.    -192,  -24,  0,0,
  72.       0,   0,   0,0,
  73.       0,   0,   0,0,
  74.       0,   0,   0,0,
  75.       0,   0,   0,0,
  76.       0,   0,   0,0,
  77.       0,   0,   0,0,
  78.       0,   0,   0,0,
  79.     -60,-120,   0,0,
  80.       0,   0,   0,0,
  81.       0,   0,   0,0,
  82.       0,   0,   0,0,
  83.       0,   0,   0,0,
  84.       0,   0,   0,0,
  85.       0,   0,   0,0,
  86.       0,   0,   0,0,
  87.     -30,-192,   0,0,
  88.       0,   0,   0,0,
  89.       0,   0,   0,0,
  90.       0,   0,   0,0,
  91.       0,   0,   0,0,
  92.       0,   0,   0,0,
  93.       0,   0,   0,0,
  94.       0,   0,   0,0
  95.    };
  96.  
  97. WORD ObjectAreas[]= /* Flächen-Tabelle */
  98.   {
  99.  
  100.   2+8+8+8+8+8,
  101.   8,7,0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4,0*4,
  102.   8,7,47*4,46*4,45*4,44*4,43*4,42*4,41*4,40*4,47*4,
  103.  
  104.   4,3,40*4,41*4,33*4,32*4,40*4,0,0,0,0,
  105.   4,4,41*4,42*4,34*4,33*4,41*4,0,0,0,0,
  106.   4,3,42*4,43*4,35*4,34*4,42*4,0,0,0,0,
  107.   4,4,43*4,44*4,36*4,35*4,43*4,0,0,0,0,
  108.   4,3,44*4,45*4,37*4,36*4,44*4,0,0,0,0,
  109.   4,4,45*4,46*4,38*4,37*4,45*4,0,0,0,0,
  110.   4,3,46*4,47*4,39*4,38*4,46*4,0,0,0,0,
  111.   4,4,47*4,40*4,32*4,39*4,47*4,0,0,0,0,
  112.  
  113.   4,3,8*4,9*4,1*4,0*4,8*4,0,0,0,0,
  114.   4,4,9*4,10*4,2*4,1*4,9*4,0,0,0,0,
  115.   4,3,10*4,11*4,3*4,2*4,10*4,0,0,0,0,
  116.   4,4,11*4,12*4,4*4,3*4,11*4,0,0,0,0,
  117.   4,3,12*4,13*4,5*4,4*4,12*4,0,0,0,0,
  118.   4,4,13*4,14*4,6*4,5*4,13*4,0,0,0,0,
  119.   4,3,14*4,15*4,7*4,6*4,14*4,0,0,0,0,
  120.   4,4,15*4,8*4,0*4,7*4,15*4,0,0,0,0,
  121.  
  122.   4,2,16*4,17*4,9*4,8*4,16*4,0,0,0,0,
  123.   4,1,17*4,18*4,10*4,9*4,17*4,0,0,0,0,
  124.   4,2,18*4,19*4,11*4,10*4,18*4,0,0,0,0,
  125.   4,1,19*4,20*4,12*4,11*4,19*4,0,0,0,0,
  126.   4,2,20*4,21*4,13*4,12*4,20*4,0,0,0,0,
  127.   4,1,21*4,22*4,14*4,13*4,21*4,0,0,0,0,
  128.   4,2,22*4,23*4,15*4,14*4,22*4,0,0,0,0,
  129.   4,1,23*4,16*4,8*4,15*4,23*4,0,0,0,0,
  130.  
  131.   4,5,24*4,25*4,17*4,16*4,24*4,0,0,0,0,
  132.   4,6,25*4,26*4,18*4,17*4,25*4,0,0,0,0,
  133.   4,5,26*4,27*4,19*4,18*4,26*4,0,0,0,0,
  134.   4,6,27*4,28*4,20*4,19*4,27*4,0,0,0,0,
  135.   4,5,28*4,29*4,21*4,20*4,28*4,0,0,0,0,
  136.   4,6,29*4,30*4,22*4,21*4,29*4,0,0,0,0,
  137.   4,5,30*4,31*4,23*4,22*4,30*4,0,0,0,0,
  138.   4,6,31*4,24*4,16*4,23*4,31*4,0,0,0,0,
  139.  
  140.   4,2,32*4,33*4,25*4,24*4,32*4,0,0,0,0,
  141.   4,1,33*4,34*4,26*4,25*4,33*4,0,0,0,0,
  142.   4,2,34*4,35*4,27*4,26*4,34*4,0,0,0,0,
  143.   4,1,35*4,36*4,28*4,27*4,35*4,0,0,0,0,
  144.   4,2,36*4,37*4,29*4,28*4,36*4,0,0,0,0,
  145.   4,1,37*4,38*4,30*4,29*4,37*4,0,0,0,0,
  146.   4,2,38*4,39*4,31*4,30*4,38*4,0,0,0,0,
  147.   4,1,39*4,32*4,24*4,31*4,39*4,0,0,0,0
  148.   };
  149.  
  150. WORD ObjectMove[]=
  151.   {
  152.      1, 0,0,-14500, 0,0,0,  /* Positionierung und Animationspfad */
  153.    210, 0,0,    60, 2,1,0,
  154.    LAB,
  155.     90, 0,0,     0, 2,1,0,
  156.    DBF,16,
  157.    210, 0,0,   -60, 2,1,0,
  158.    END_1
  159.   };
  160.  
  161. VBIProg()  /* Assembler-Teil: berechnet und mutiert Rotations-Körper im VBI */
  162.  {
  163.  #asm
  164.  movem.l d2-d7/a2-a5,-(a7)
  165.  lea     rotptr(pc),a4
  166.  lea     rotcnt(pc),a5
  167.  move.l  objectptr(pc),a2
  168.  move.l (a4),a3
  169.  moveq  #5,d6
  170. .llp:
  171.  move.w (a2),d0
  172.  cmp.w  (a3),d0
  173.  beq.s  .okx
  174.  blt.s  .lowx
  175.  subq.w #2,(a2)
  176.  bra.s  .okx
  177. .lowx:
  178.  addq.w #2,(a2)
  179. .okx
  180.  move.w 2(a2),d0
  181.  cmp.w  2(a3),d0
  182.  beq.s  .oky
  183.  blt.s  .lowy
  184.  subq.w #2,2(a2)
  185.  bra.s  .oky
  186. .lowy:
  187.  addq.w #2,2(a2)
  188. .oky
  189.  lea    8*8(a2),a2
  190.  addq.l #4,a3
  191.  dbf    d6,.llp
  192.  subq.w #1,(a5)
  193.  bgt.s  .ok
  194.  tst.w  (a3)+
  195.  bge.s  .ok1
  196.  lea    rottab+2(pc),a3
  197. .ok1:
  198.  move.w -2(a3),(a5)
  199.  move.l a3,(a4)
  200. .ok:
  201.  bsr.s  dorot
  202. .end
  203.  movem.l (a7)+,d2-d7/a2-a5
  204.  bra    end
  205.  
  206. dorot:
  207.  lea    sintab(pc),a0
  208.  lea    costab(pc),a1
  209.  move.l objectptr(pc),a2
  210.  moveq  #5,d6
  211.  moveq  #15,d7
  212. .roto:
  213.  moveq  #7,d5
  214.  moveq  #0,d4
  215.  move.w (a2),d3
  216.  move.w 2(a2),d1
  217. .roti:
  218.  move.w d3,d0
  219.  move.w d3,d2
  220.  muls   0(a1,d4.w),d0
  221.  muls   0(a0,d4.w),d2
  222.  asr.l  d7,d0
  223.  asr.l  d7,d2
  224.  movem.w d0-d2,(a2)
  225.  addq.l #8,a2
  226.  add.w  #90,d4
  227.  dbf    d5,.roti
  228.  dbf    d6,.roto
  229.  rts
  230.  
  231. rotptr    dc.l rottab+2
  232. rotcnt    dc.w 0
  233. objectptr dc.l _ObjectPoints+2
  234.  
  235. sintab    DC.W    0,$23B,$477,$6B2,$8ED,$B27,$D61,$F99
  236.     DC.W    $11D0,$1405,$1639,$186C,$1A9C,$1CCA,$1EF7,$2120
  237.     DC.W    $2347,$256C,$278D,$29AB,$2BC6,$2DDE,$2FF2,$3203
  238.     DC.W    $340F,$3617,$381C,$3A1B,$3C17,$3E0D,$3FFF,$41EC
  239.     DC.W    $43D3,$45B6,$4793,$496A,$4B3B,$4D07,$4ECD,$508C
  240.     DC.W    $5246,$53F9,$55A5,$574B,$58E9,$5A81,$5C12,$5D9C
  241.     DC.W    $5F1E,$6099,$620C,$6378,$64DC,$6638,$678D,$68D9
  242.     DC.W    $6A1D,$6B58,$6C8C,$6DB6,$6ED9,$6FF2,$7103,$720B
  243.     DC.W    $730A,$7400,$74EE,$75D2,$76AD,$777E,$7846,$7905
  244.     DC.W    $79BB,$7A67,$7B09,$7BA2,$7C31,$7CB7,$7D32,$7DA4
  245.     DC.W    $7E0D,$7E6B,$7EC0,$7F0A,$7F4B,$7F82,$7FAF,$7FD2
  246.     DC.W    $7FEB,$7FFA
  247. costab    DC.W    $7FFF,$7FFA,$7FEB,$7FD2,$7FAF,$7F82
  248.     DC.W    $7F4B,$7F0A,$7EC0,$7E6B,$7E0D,$7DA4,$7D32,$7CB7
  249.     DC.W    $7C31,$7BA2,$7B09,$7A67,$79BB,$7905,$7846,$777E
  250.     DC.W    $76AD,$75D2,$74EE,$7400,$730A,$720B,$7103,$6FF2
  251.     DC.W    $6ED9,$6DB6,$6C8B,$6B58,$6A1D,$68D9,$678D,$6638
  252.     DC.W    $64DC,$6378,$620C,$6099,$5F1E,$5D9C,$5C12,$5A81
  253.     DC.W    $58E9,$574B,$55A5,$53F9,$5246,$508C,$4ECD,$4D07
  254.     DC.W    $4B3B,$496A,$4793,$45B6,$43D3,$41EC,$3FFF,$3E0D
  255.     DC.W    $3C17,$3A1B,$381C,$3618,$340F,$3203,$2FF2,$2DDE
  256.     DC.W    $2BC7,$29AB,$278D,$256C,$2347,$2120,$1EF7,$1CCB
  257.     DC.W    $1A9C,$186C,$163A,$1406,$11D0,$F99,$D61,$B27
  258.     DC.W    $8ED,$6B3,$477,$23C,0,$FDC5,$FB89,$F94E
  259.     DC.W    $F713,$F4D9,$F2A0,$F067,$EE30,$EBFB,$E9C7,$E794
  260.     DC.W    $E564,$E336,$E10A,$DEE0,$DCB9,$DA95,$D873,$D655
  261.     DC.W    $D43A,$D222,$D00E,$CDFE,$CBF1,$C9E9,$C7E5,$C5E5
  262.     DC.W    $C3EA,$C1F3,$C001,$BE14,$BC2D,$BA4B,$B86E,$B696
  263.     DC.W    $B4C5,$B2F9,$B133,$AF74,$ADBB,$AC08,$AA5B,$A8B6
  264.     DC.W    $A717,$A57F,$A3EE,$A264,$A0E2,$9F67,$9DF4,$9C88
  265.     DC.W    $9B24,$99C8,$9874,$9728,$95E4,$94A8,$9375,$924A
  266.     DC.W    $9128,$900E,$8EFD,$8DF5,$8CF6,$8C00,$8B13,$8A2E
  267.     DC.W    $8954,$8882,$87BA,$86FB,$8645,$8599,$84F7,$845E
  268.     DC.W    $83CF,$8349,$82CE,$825C,$81F3,$8195,$8140,$80F6
  269.     DC.W    $80B5,$807E,$8051,$802E,$8015,$8006,$8001,$8006
  270.     DC.W    $8015,$802E,$8051,$807E,$80B5,$80F6,$8140,$8195
  271.     DC.W    $81F3,$825B,$82CD,$8349,$83CF,$845E,$84F7,$8599
  272.     DC.W    $8645,$86FB,$87B9,$8882,$8953,$8A2E,$8B12,$8BFF
  273.     DC.W    $8CF5,$8DF5,$8EFD,$900E,$9127,$9249,$9374,$94A7
  274.     DC.W    $95E3,$9727,$9873,$99C7,$9B23,$9C87,$9DF3,$9F67
  275.     DC.W    $A0E1,$A264,$A3ED,$A57E,$A716,$A8B5,$AA5B,$AC07
  276.     DC.W    $ADBA,$AF73,$B133,$B2F8,$B4C4,$B696,$B86D,$BA4A
  277.     DC.W    $BC2C,$BE14,$C000,$C1F2,$C3E9,$C5E4,$C7E4,$C9E8
  278.     DC.W    $CBF0,$CDFD,$D00D,$D221,$D439,$D654,$D872,$DA94
  279.     DC.W    $DCB8,$DEDF,$E109,$E335,$E563,$E794,$E9C6,$EBFA
  280.     DC.W    $EE30,$F066,$F29F,$F4D8,$F712,$F94D,$FB88,$FDC4
  281. sinend    DC.W    0,$23B,$477,$6B2,$8ED,$B27,$D61,$F99
  282.     DC.W    $11D0,$1405,$1639,$186C,$1A9C,$1CCA,$1EF7,$2120
  283.     DC.W    $2347,$256C,$278D,$29AB,$2BC6,$2DDE,$2FF2,$3203
  284.     DC.W    $340F,$3617,$381C,$3A1B,$3C17,$3E0D,$3FFF,$41EC
  285.     DC.W    $43D3,$45B6,$4793,$496A,$4B3B,$4D07,$4ECD,$508C
  286.     DC.W    $5246,$53F9,$55A5,$574B,$58E9,$5A81,$5C12,$5D9C
  287.     DC.W    $5F1E,$6099,$620C,$6378,$64DC,$6638,$678D,$68D9
  288.     DC.W    $6A1D,$6B58,$6C8C,$6DB6,$6ED9,$6FF2,$7103,$720B
  289.     DC.W    $730A,$7400,$74EE,$75D2,$76AD,$777E,$7846,$7905
  290.     DC.W    $79BB,$7A67,$7B09,$7BA2,$7C31,$7CB7,$7D32,$7DA4
  291.     DC.W    $7E0D,$7E6B,$7EC0,$7F0A,$7F4B,$7F82,$7FAF,$7FD2
  292.     DC.W    $7FEB,$7FFA
  293. cosend
  294.  
  295. rottab:
  296.  dc.w 150
  297.  dc.w -$a*3,$40*3
  298.  dc.w -$14*3,$28*3
  299.  dc.w -$40*3,$8*3
  300.  dc.w -$40*3,-$8*3
  301.  dc.w -$14*3,-$28*3
  302.  dc.w -$a*3,-$40*3
  303.  dc.w 150
  304.  dc.w -$3a*3,$40*3
  305.  dc.w -$24*3,$20*3
  306.  dc.w -$10*3,$20*3
  307.  dc.w -$10*3,-$20*3
  308.  dc.w -$24*3,-$20*3
  309.  dc.w -$3a*3,-$40*3
  310.  dc.w 150
  311.  dc.w -$a*3,$40*3
  312.  dc.w -$34*3,$20*3
  313.  dc.w -$10*3,$20*3
  314.  dc.w -$10*3,-$20*3
  315.  dc.w -$34*3,-$20*3
  316.  dc.w -$a*3,-$40*3
  317.  dc.w 150
  318.  dc.w -$a*3,$28*3
  319.  dc.w -$34*3,$8*3
  320.  dc.w -$10*3,$8*3
  321.  dc.w -$10*3,-$8*3
  322.  dc.w -$34*3,-$8*3
  323.  dc.w -$a*3,-$28*3
  324.  dc.w 150
  325.  dc.w -$a*3,$40*3
  326.  dc.w -$14*3,$8*3
  327.  dc.w -$40*3,$8*3
  328.  dc.w -$40*3,-$8*3
  329.  dc.w -$14*3,-$8*3
  330.  dc.w -$a*3,-$40*3
  331.  dc.w 150
  332.  dc.w -$a*3,$40*3
  333.  dc.w -$3c*3,$28*3
  334.  dc.w -$50*3,$10*3
  335.  dc.w -$50*3,-$10*3
  336.  dc.w -$3c*3,-$28*3
  337.  dc.w -$a*3,-$40*3
  338.  dc.w 150
  339.  dc.w -$a*3,$8*3
  340.  dc.w -$3c*3,$28*3
  341.  dc.w -$50*3,$10*3
  342.  dc.w -$50*3,-$10*3
  343.  dc.w -$3c*3,-$28*3
  344.  dc.w -$a*3,-$8*3
  345.  dc.w 150
  346.  dc.w -$a*3,$40*3
  347.  dc.w -$24*3,$30*3
  348.  dc.w -$40*3,-$8*3
  349.  dc.w -$10*3,-$10*3
  350.  dc.w -$24*3,-$20*3
  351.  dc.w -$a*3,-$40*3
  352.  dc.w 150
  353.  dc.w -$a*3,$40*3
  354.  dc.w -$24*3,$20*3
  355.  dc.w -$8*3,-$10*3
  356.  dc.w -$20*3,-$10*3
  357.  dc.w -$24*3,-$20*3
  358.  dc.w -$a*3,-$40*3
  359.  dc.w 150
  360.  dc.w -$3a*3,$40*3
  361.  dc.w -$24*3,$20*3
  362.  dc.w -$20*3,$10*3
  363.  dc.w -$8*3,$10*3
  364.  dc.w -$c*3,-$20*3
  365.  dc.w -$3a*3,-$40*3
  366.  dc.w 150
  367.  dc.w -$a*3,$10*3
  368.  dc.w -$3c*3,$40*3
  369.  dc.w -$20*3,$10*3
  370.  dc.w -$8*3,$10*3
  371.  dc.w -$c*3,-$30*3
  372.  dc.w -$32*3,-$40*3
  373.  dc.w 150
  374.  dc.w -$a*3,$40*3
  375.  dc.w -$44*3,$20*3
  376.  dc.w -$8*3,$20*3
  377.  dc.w -$20*3,-$10*3
  378.  dc.w -$c*3,-$20*3
  379.  dc.w -$a*3,-$40*3
  380.  dc.w -1
  381.  
  382. end:
  383.  #endasm
  384.  }
  385.  
  386. struct Object MyObject=
  387.   {
  388.    ObjectPoints,   /* Zeiger auf zugehörige Punkttabelle */
  389.    ObjectAreas,    /* Zeiger auf zugehörige Flächentabelle */
  390.    ObjectMove,     /* Zeiger auf zugehörige Bewegungstabelle */
  391.    0,              /* Flags */
  392.    0,0,0,          /* Start-Position */
  393.    0,0,0           /* Start-Rotation */
  394.   };
  395.  
  396. WORD MyColTab[]= /* Farbtabelle */
  397.   {
  398.    0,  0, 0, 0,   /* Register, Rot,Grün,Blau */
  399.    1,  0,10, 0,
  400.    2,  0, 8, 0,
  401.    3,  0, 0,12,
  402.    4,  0, 0,10,
  403.    5, 10, 0,10,
  404.    6,  8, 0, 8,
  405.    7,  0, 0,15,
  406.    -1
  407.   };
  408.  
  409. ULONG MyWorld[] = {  /* Welt-Struktur */
  410.    0x00000001L,      /* erstes (High-)Wort: Flags ( = 1 für Drahtgitter); zweites Wort: Anzahl der Objekte */
  411.    &MyObject         /* Zeiger auf Struktur des ersten Objekts */
  412. };
  413.  
  414.  
  415. struct ViewStruct *ViewStruct;
  416.  
  417.  
  418. main()
  419.   {
  420.    if ((VecBase=(struct VecBase *)OpenLibrary("vector.library",0))==NULL)  /* "vector.library" öffnen */
  421.      {
  422.       printf("Unable to open 'vector.library'.\n");
  423.       exit(0);
  424.      }
  425.    if ((ViewStruct=OpenVScreen(&MyVScreen))==NULL)  /* "Animationsscreen" öffnen */
  426.      {
  427.       printf("Couldn't open VScreen.\n");
  428.       CloseLibrary(VecBase);
  429.       exit(0);
  430.      }
  431.    SetColors(ViewStruct, &MyColTab);   /* Farben setzen */
  432.  
  433.    AutoScaleOn(MyVScreen.ViewModes);   /* Entzerrung für höhere Auflösung */
  434.  
  435.    SetVBI(&VBIProg);                   /* Assembler-Programm in VBI einklinken */
  436.  
  437.    DoAnim(&MyWorld);                   /* Auf zur Animation!! */
  438.  
  439.    CloseVScreen();                     /* Bildschirm schließen */
  440.  
  441.    CloseLibrary(VecBase);
  442.   }
  443.