home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / E / TFF-A32R.LZX / AmigaE3.2a / Src / Tools / FilledVector / examples / zed.e < prev   
Encoding:
Text File  |  1994-07-06  |  6.4 KB  |  268 lines

  1. /*
  2.     More complex demonstration of filledvector.m, with
  3.     a multiple object display, and using the matrix
  4.     functions to modify an object after its been made
  5.  
  6.     Michael Zucchi, 1994, This code in the public domain
  7.  */
  8.  
  9. OPT OSVERSION=39
  10.  
  11. MODULE 'tools/filledvector', 'tools/filledvdefs', 'exec/lists', 'intuition/screens',
  12.     'tools/scrbuffer', 'graphics/rastport'
  13.  
  14. DEF list:PTR TO mlh,screen,pc,
  15.     zed:PTR TO vobject,eee:PTR TO vobject,dee:PTR TO vobject,
  16.     scr:PTR TO screen
  17.  
  18. PROC main()
  19.   /* create objects, and add to list */
  20.   IF createobjects()
  21.     warpobjects()
  22.     IF screen:=sb_OpenScreen([SA_DEPTH,4,SA_WIDTH,320,SA_HEIGHT,256,SA_DISPLAYID,$0000,0],0)
  23.       IF pc:=newPolyContext(sb_GetBitMap(screen),50)
  24.         demo()
  25.         freePolyContext(pc)
  26.       ENDIF
  27.       sb_CloseScreen(screen)
  28.     ENDIF
  29.     freeobjects()
  30.   ENDIF
  31. ENDPROC
  32.  
  33. /* just demos basic rendering until the user chooses to exit */
  34.  
  35. PROC demo()
  36.   DEF p:position,bitm,myrp:rastport
  37.  
  38.   p.ax:=0;p.ay:=0;p.az:=0;p.px:=80;p.py:=0;p.pz:=8000;
  39.  
  40.   setPolyFlags(pc,1,1)    -> z clipping on
  41.  
  42.   bitm:=sb_NextBuffer(screen)
  43.   sb_NextBuffer(screen)
  44.   scr:=sb_GetScreen(screen);
  45.   InitRastPort(myrp);
  46.  
  47.   WHILE Mouse()<>3
  48.     bitm:=sb_NextBuffer(screen)
  49.     myrp.bitmap:=bitm
  50.     SetRast(myrp,0);
  51.     setPolyBitMap(pc, bitm)
  52.  
  53.     moveDrawVList(pc, list, p)
  54.     p.az:=p.az+1;
  55.     p.ax:=p.ax-2;
  56.     p.ay:=p.ay+3;
  57.  
  58.     IF Mouse()=1 THEN p.pz:=p.pz+35
  59.     IF Mouse()=2 THEN p.pz:=p.pz-35
  60.   ENDWHILE
  61.  
  62.  
  63. ENDPROC
  64.  
  65. PROC createobjects()
  66.   DEF stat=-1
  67.  
  68.   /* allocate a list, and add them to it */
  69.   list:=newVList()
  70.  
  71.   /* the letter z */
  72.   zed:=newVectorObject(0,20,12,
  73.     [-178*3,98*3,20*4,    /* points */
  74.     -34*3,98*3,20*4,
  75.     -34*3,66*3,20*4,
  76.     -146*3,-50*3,20*4,
  77.     -34*3,-50*3,20*4,
  78.     -34*3,-82*3,20*4,
  79.     -178*3,-82*3,20*4,
  80.     -178*3,-50*3,20*4,
  81.     -66*3,66*3,20*4,
  82.     -178*3,66*3,20*4,
  83.     -178*3,98*3,-20*4,    /* lower side */
  84.     -34*3,98*3,-20*4,
  85.     -34*3,66*3,-20*4,
  86.     -146*3,-50*3,-20*4,
  87.     -34*3,-50*3,-20*4,
  88.     -34*3,-82*3,-20*4,
  89.     -178*3,-82*3,-20*4,
  90.     -178*3,-50*3,-20*4,
  91.     -66*3,66*3,-20*4,
  92.     -178*3,66*3,-20*4]:INT,
  93.     /* since no 'depth' sorting is done - ensure innermost surfaces drawn first */
  94.     [3,4,14,1,    /* bottom inside edge */
  95.         [4,3,4,4,14,14,13,13,3]:INT,0,
  96.     8,9,19,2,    /* top inside edge */
  97.         [4,8,9,9,19,19,18,18,8]:INT,0,
  98.  
  99.     2,3,13,3,    /* sloping inside edge */
  100.         [4,2,3,3,13,13,12,12,2]:INT,0,
  101.     7,8,18,4,    /* sloping inside edge-left */
  102.         [4,7,8,8,18,18,17,17,7]:INT,0,
  103.  
  104.     2,1,0,5,    /* front face */
  105.         [10,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,0]:INT,0,
  106.     10,11,12,6,    /* back face */
  107.         [10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,10]:INT,0,
  108.     0,1,11,7,    /* top bar of z */
  109.         [4,0,1,1,11,11,10,10,0]:INT,0,
  110.     5,6,16,8,    /* bottom bar of z */
  111.         [4,5,6,6,16,16,15,15,5]:INT,0,
  112.     1,2,12,9,    /* first back end */
  113.         [4,1,2,2,12,12,11,11,1]:INT,0,
  114.     4,5,15,10,    /* next back end */
  115.         [4,4,5,5,15,15,14,14,4]:INT,0,
  116.     6,7,17,11,    /* left lower end */
  117.         [4,6,7,7,17,17,16,16,6]:INT,0,
  118.     9,0,10,12,    /* upper left end */
  119.         [4,9,0,0,10,10,19,19,9]:INT,0]:face);
  120.  
  121.   /* the letter e */
  122.   eee:=newVectorObject(0,24,14,
  123.     [0*3,0*3,20*4,
  124.      66*3,0*3,20*4,
  125.      66*3,-18*3,20*4,
  126.      18*3,-18*3,20*4,
  127.      18*3,-34*3,20*4,
  128.      50*3,-34*3,20*4,
  129.      50*3,-50*3,20*4,
  130.      18*3,-50*3,20*4,
  131.      18*3,-66*3,20*4,
  132.      66*3,-66*3,20*4,
  133.      66*3,-82*3,20*4,
  134.      0*3,-82*3,20*4,
  135.      0*3,0*3,-20*4,
  136.      66*3,0*3,-20*4,
  137.      66*3,-18*3,-20*4,
  138.      18*3,-18*3,-20*4,
  139.      18*3,-34*3,-20*4,
  140.      50*3,-34*3,-20*4,
  141.      50*3,-50*3,-20*4,
  142.      18*3,-50*3,-20*4,
  143.      18*3,-66*3,-20*4,
  144.      66*3,-66*3,-20*4,
  145.      66*3,-82*3,-20*4,
  146.      0*3,-82*3,-20*4]:INT,
  147.  
  148.     /* since no 'depth' sorting is done - ensure innermost surfaces drawn first */
  149.     [3,4,16,13,    /* inside top right of E */
  150.         [4,3,4,4,16,16,15,15,3]:INT,0,
  151.     7,8,20,14,    /* inside lower right of E */
  152.         [4,7,8,8,20,20,19,19,7]:INT,0,
  153.     2,3,15,15,    /* upper inner E */
  154.         [4,2,3,3,15,15,14,14,2]:INT,0,
  155.     8,9,21,16,    /* lower inner */
  156.         [4,8,9,9,21,21,20,20,8]:INT,0,
  157.     4,5,17,17,    /* top of bar */
  158.         [4,4,5,5,17,17,16,16,4]:INT,0,
  159.     6,7,19,18,    /* bottom of bar */
  160.         [4,6,7,7,19,19,18,18,6]:INT,0,
  161.     5,6,18,19,    /* front of bar */
  162.         [4,5,6,6,18,18,17,17,5]:INT,0,
  163.     /* all outside surfaces */
  164.     1,2,14,20,    /* top front cap */
  165.         [4,1,2,2,14,14,13,13,1]:INT,0,
  166.     9,10,22,21,    /* bottom front cap */
  167.         [4,9,10,10,22,22,21,21,9]:INT,0,
  168.  
  169.     0,1,13,22,    /* top */
  170.         [4,0,1,1,13,13,12,12,0]:INT,0,
  171.     10,11,23,23,    /* bottom */
  172.         [4,10,11,11,23,23,22,22,10]:INT,0,
  173.     11,0,12,24,    /* back */
  174.         [4,11,0,0,12,12,23,23,11]:INT,0,
  175.  
  176.     2,1,0,25,    /* front face */
  177.         [12,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,0]:INT,0,
  178.     12,13,14,26,    /* rear face */
  179.         [12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,12]:INT,0]:face);
  180.  
  181.  
  182.   /* the letter d */
  183.   dee:=newVectorObject(0,24,14,
  184.     [-34*3,42*3,20*4,
  185.     18*3,42*3,20*4,
  186.     34*3,26*3,20*4,
  187.     34*3,-26*3,20*4,
  188.     18*3,-42*3,20*4,
  189.     -34*3,-42*3,20*4,
  190.     -18*3,26*3,20*4,
  191.     0,26*3,20*4,
  192.     18*3,10*3,20*4,
  193.     18*3,-10*3,20*4,
  194.     0,-26*3,20*4,
  195.     -18*3,-26*3,20*4,
  196.  
  197.     -34*3,42*3,-20*4,
  198.     18*3,42*3,-20*4,
  199.     34*3,26*3,-20*4,
  200.     34*3,-26*3,-20*4,
  201.     18*3,-42*3,-20*4,
  202.     -34*3,-42*3,-20*4,
  203.     -18*3,26*3,-20*4,
  204.     0,26*3,-20*4,
  205.     18*3,10*3,-20*4,
  206.     18*3,-10*3,-20*4,
  207.     0,-26*3,-20*4,
  208.     -18*3,-26*3,-20*4]:INT,
  209.  
  210.     [19,7,6,27,    /* top inner */
  211.         [4,6,7,7,19,19,18,18,6]:INT,0,
  212.     20,8,7,28,    /* top right inner */
  213.         [4,7,8,8,20,20,19,19,7]:INT,0,
  214.     21,9,8,29,    /* right inner */
  215.         [4,8,9,9,21,21,20,20,8]:INT,0,
  216.     22,10,9,30,    /* lower right inner */
  217.         [4,9,10,10,22,22,21,21,9]:INT,0,
  218.     23,11,10,31,    /* lower inner */
  219.         [4,10,11,11,23,23,22,22,10]:INT,0,
  220.     18,6,11,32,    /* inner left */
  221.         [4,11,6,6,18,18,23,23,11]:INT,0,
  222.  
  223.     0,1,13,33,    /* top */
  224.         [4,0,1,1,13,13,12,12,0]:INT,0,
  225.     1,2,14,34,    /* top right */
  226.         [4,1,2,2,14,14,13,13,1]:INT,0,
  227.     2,3,15,35,    /* right */
  228.         [4,2,3,3,15,15,14,14,2]:INT,0,
  229.     3,4,16,36,    /* lower right */
  230.         [4,3,4,4,16,16,15,15,3]:INT,0,
  231.     4,5,17,37,    /* bottom */
  232.         [4,4,5,5,17,17,16,16,4]:INT,0,
  233.  
  234.     5,0,12,38,    /* back */
  235.         [4,5,0,0,12,12,17,17,5]:INT,0,
  236.  
  237.     2,1,0,39,    /* front face */
  238.         [12,0,1,1,2,2,3,3,4,4,5,5,0,6,7,7,8,8,9,9,10,10,11,11,6]:INT,0,
  239.     12,13,14,40,    /* rear face */
  240.         [12,12,13,13,14,14,15,15,16,16,17,17,12,18,19,19,20,20,21,21,22,22,23,23,18]:INT,0]:face);
  241.  
  242.   dee.px:=130*3;dee.py:=-42*3;    -> real position
  243.  
  244.   addVObject(list,zed)
  245.   addVObject(list,eee)
  246.   addVObject(list,dee)
  247.  
  248. ENDPROC stat
  249.  
  250. PROC freeobjects()
  251.   freeVList(list,1)       /* also free nodes */
  252. ENDPROC
  253.  
  254. /*
  255.     Use the matrix functions to modify the objects a little bit
  256.  */
  257.  
  258. PROC warpobjects()
  259. DEF mat:matrix
  260.  
  261. setMatRotate(mat, 0,40,0);
  262. matApply3(mat,24,getVObjectPoints(dee),getVObjectPoints(dee))
  263. setMatRotate(mat, 0,-40,0);
  264. matApply3(mat,20,getVObjectPoints(zed),getVObjectPoints(zed))
  265.  
  266. ENDPROC
  267.  
  268.