home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / gfx / 3d / irit / contrib / scripts / bulb.irt < prev    next >
Encoding:
Text File  |  1995-01-30  |  7.5 KB  |  231 lines

  1. # Warning!
  2. #
  3. # The code is _ugly_. I mean it. Don't read if not pressed to.
  4.  
  5. resolution = 15;
  6.  
  7. neck = 0.2;
  8. rneck = 0.18;
  9. neck2 = 0.35;
  10. bbrk = 0.6;
  11. bprebrk = 0.05;
  12. preneck = 0.15;
  13. pprebrk = 0.07;
  14. pbrk = 0.4;
  15. helrad = 0.02;
  16.  
  17. bbase = 0.07 :
  18. bbase2 = 0.05 :
  19. bnarrow = 0.025 :
  20. bheight = 0.5 :
  21. bnheight = 0.4 :
  22. bupper = 0.04 :
  23.  
  24. p_ent = FUNCTION() : t :
  25.   curve = NIL() :
  26.   FOR (t = 0, pprebrk / 24 , pprebrk / 2,
  27.     curve = curve + LIST(CTLPT(E3, sqrt(sqrt(t)) * rneck / sqrt(sqrt(pprebrk / 2)) / 2.5, 0, t))) :
  28.   FOR (t = 2 * pprebrk / 3, pprebrk / 9, pprebrk,
  29.     curve = curve + LIST(CTLPT(E3, sqrt(sqrt(t)) * rneck / sqrt(sqrt(pprebrk)), 0, t))) :
  30.   return = CBSPLINE(2, curve, LIST(KV_OPEN)) ;
  31.  
  32. p_neck = FUNCTION() : t :
  33.   curve = NIL() :
  34.   FOR (t = pprebrk, (pbrk - pprebrk) / 4, pbrk,
  35.     curve = curve + LIST(CTLPT(E3, rneck, 0, t))) :
  36.   return = CBSPLINE(2, curve, LIST(KV_OPEN)) ;
  37.  
  38. p_top = FUNCTION(upto) : t :
  39.   curve = NIL() :
  40.   FOR (t = pbrk, (upto - pbrk) / 2, upto,
  41.     curve = curve + LIST(CTLPT(E3, rneck + (t - pbrk) * (neck2 - rneck) * 7, 0, t))) :
  42.   return = CBSPLINE(2, curve, LIST(KV_OPEN)) ;
  43.  
  44. b_ent = FUNCTION() : t : cr :
  45.   cr = NIL() :
  46.   FOR (t = 0, bprebrk / 2.5, bprebrk,
  47.     cr = cr + LIST(CTLPT(E3, preneck + t * (neck - preneck) / bprebrk, 0, t))) :
  48.   return = cr ;
  49.  
  50. b_neck = FUNCTION() : t : cr :
  51.   cr = NIL() :
  52.   FOR (t = bprebrk, (bbrk - bprebrk) / 2.5, bbrk,
  53.     cr = cr + LIST(CTLPT(E3, neck + (t - bprebrk) * (neck2 - neck) / (bbrk - bprebrk), 0, t))) :
  54.   return = cr ;
  55.  
  56. b_sph = FUNCTION(upto) : t : x : z : cr :
  57.   cr = NIL() :
  58.   FOR (t = bbrk, (upto - bbrk) / 8, upto,
  59.     z = upto - (sqr(upto - t)) / (upto - bbrk) :
  60.     x = 0.25 - sqr((upto - 0.5) - z) :
  61.     if (x < 0, x = 0, x = sqrt(x)) :
  62.     cr = cr + LIST(CTLPT(E3, x, 0, z))) :
  63.   return = cr ;
  64.  
  65. bubble_curve = FUNCTION(upto) :
  66.   b_list = b_ent() + b_neck() + b_sph(upto) :
  67.   return = CBSPLINE(3, b_list, LIST(KV_OPEN)) ;
  68.  
  69. plug_curve = FUNCTION(upto) : step : curve : t :
  70.   return = p_ent() + p_neck() + p_top(upto) ;
  71.  
  72. bubble = FUNCTION() : bb :
  73.   bb = SURFPREV(bubble_curve(1.35)) :
  74.   COLOR(bb, WHITE) :
  75.   ATTRIB(bb, "transp", 0.95) :
  76.   return = bb ;
  77.  
  78. bottle_bottom = FUNCTION(width, width2, upto) : cr : t :
  79.   cr = NIL() :
  80.   FOR (t = 0, upto / 6, upto * 5 / 6,
  81.     cr = cr + LIST(CTLPT(E3, width + (width2 - width) * t / upto, 0, t))) :
  82.   return = cr ;
  83.  
  84. bottle_narrow = FUNCTION(from, width, upto) : cr : t :
  85.   cr = NIL() :
  86.   FOR (t = from, (upto - from) / 6, from + (upto - from) * 5 / 6,
  87.     cr = cr + LIST(CTLPT(E3, width, 0, t))) :
  88.   return = cr ;
  89.  
  90. bottle_upper = FUNCTION(from, width) : cr : t : height :
  91.   height = 0.05 :
  92.   cr = NIL() :
  93.   FOR (t = from, height / 4, from + height,
  94.     cr = cr + LIST(CTLPT(E3, width, 0, t))) :
  95.   return = cr ;
  96.  
  97. bottle_curve = FUNCTION() : cr :
  98.   cr = bottle_bottom(bbase, bbase2, bnheight) + bottle_narrow(bnheight, bnarrow, bheight) + bottle_upper(bheight, bupper) :
  99.   return = CBSPLINE(3, cr, LIST(KV_OPEN)) ;
  100.  
  101. mustasche = FUNCTION() : m1 : m2 : m3 : m4 : m5 : circ1 : circ2 :
  102.   circ1 = CIRCLE(VECTOR(0, 0, 0), 0.005) :
  103.   circ2 = CIRCLE(VECTOR(0, 0, 0), 0.003) :
  104.   m1 = LIST(SWEEPSRF(circ1,
  105.                      CBSPLINE(2,
  106.                               LIST(CTLPT(E3, -bbase2, 0, bnheight * 5 / 6),
  107.                                    CTLPT(E3, -0.15, 0, 0.8)),
  108.                               LIST(KV_OPEN)),
  109.                      OFF)) :
  110.   COLOR(m1, GREEN) :
  111.   m2 = LIST(SWEEPSRF(circ1,
  112.                      CBSPLINE(2,
  113.                               LIST(CTLPT(E3, bbase2, 0, bnheight * 5 / 6),
  114.                                    CTLPT(E3, 0.15, 0, 0.8)),
  115.                               LIST(KV_OPEN)),
  116.                      OFF)) :
  117.   COLOR(m2, GREEN) :
  118.   m3 = LIST(SWEEPSRF(circ2,
  119.                      CBSPLINE(2,
  120.                               LIST(CTLPT(E3, -bupper * 2 / 3, bupper * 1 / 3, bheight),
  121.                                    CTLPT(E3, -0.08, 0.05, 0.8)),
  122.                               LIST(KV_OPEN)),
  123.                      OFF)) :
  124.   COLOR(m3, GREEN) :
  125.   m4 = LIST(SWEEPSRF(circ2,
  126.                      CBSPLINE(2,
  127.                               LIST(CTLPT(E3, bupper * 2 / 3, bupper * 1 / 3, bheight),
  128.                                    CTLPT(E3, 0.08, 0.05, 0.8)),
  129.                               LIST(KV_OPEN)),
  130.                      OFF)) :
  131.   COLOR(m4, GREEN) :
  132.   m5 = LIST(SWEEPSRF(circ1,
  133.                      CBSPLINE(2,
  134.                               LIST(CTLPT(E3, -0.15, 0, 0.8),
  135.                                    CTLPT(E3, -0.08, 0.05, 0.8),
  136.                                    CTLPT(E3, 0.08, 0.05, 0.8),
  137.                                    CTLPT(E3, 0.15, 0, 0.8)),
  138.                               LIST(KV_OPEN)),
  139.                      OFF)) :
  140.   COLOR(m5, GREEN) :
  141.   return = m1 + m2 + m3 + m4 + m5 ;
  142.  
  143. bottle = FUNCTION() : oo :
  144.   oo = SURFPREV(bottle_curve()) :
  145.   COLOR(oo, GREEN) :
  146.   return = oo ;
  147.  
  148. plug = FUNCTION() : pp :
  149.   pp = SURFPREV(plug_curve(0.45)) :
  150.   COLOR(pp, YELLOW) :
  151.   return = pp ;
  152.  
  153. hell = FUNCTION(upto, spins) : t :
  154.   hell = NIL() :
  155.   lX = rneck :
  156.   lX1 = rneck :
  157.   lY = 0 :
  158.   lY1 = 0 :
  159.   lZ = 0 :
  160.   FOR (t = 2 * PI / 64, 2 * PI / 64, 2 * PI * spins - 2 * PI / 64,
  161.     X = rneck * cos(t) :
  162.     X1 = neck * cos(t) :
  163.     Y = rneck * sin(t) :
  164.     Y1 = neck * sin(t) :
  165.     Z = t * upto / 2 / PI / spins :
  166.     pt1 = VECTOR(lX, lY, lZ + helrad) :
  167.     pt2 = VECTOR(lX1, lY1, lZ + helrad/2) :
  168.     pt3 = VECTOR(lX1, lY1, lZ - helrad/2) :
  169.     pt4 = VECTOR(lX, lY, lZ - helrad) :
  170.     pt5 = VECTOR(X, Y, Z + helrad) :
  171.     pt6 = VECTOR(X1, Y1, Z + helrad/2) :
  172.     pt7 = VECTOR(X1, Y1, Z - helrad/2) :
  173.     pt8 = VECTOR(X, Y, Z - helrad) :
  174.     hell = hell + LIST(POLY(LIST(pt1,
  175.                                  pt2,
  176.                                  pt6,
  177.                                  pt5
  178.                                      ), FALSE),
  179.                        POLY(LIST(pt2,
  180.                                  pt3,
  181.                                  pt7,
  182.                                  pt6
  183.                                      ), FALSE),
  184.                        POLY(LIST(pt3,
  185.                                  pt4,
  186.                                  pt8,
  187.                                  pt7
  188.                                      ), FALSE)) :
  189.     lX = X : lX1 = X1 : lY = Y : lY1 = Y1 : lZ = Z) :
  190.   t = 2 * PI * spins :
  191.   X = rneck * cos(t) :
  192.   X1 = neck * cos(t) :
  193.   Y = rneck * sin(t) :
  194.   Y1 = neck * sin(t) :
  195.   Z = t * upto / 2 / PI / spins :
  196.   pt1 = VECTOR(lX, lY, lZ + helrad) :
  197.   pt2 = VECTOR(lX1, lY1, lZ + helrad/2) :
  198.   pt3 = VECTOR(lX1, lY1, lZ - helrad/2) :
  199.   pt4 = VECTOR(lX, lY, lZ - helrad) :
  200.   pt5 = VECTOR(X, Y, Z + helrad) :
  201.   pt6 = VECTOR(X1, Y1, Z + helrad/2) :
  202.   pt7 = VECTOR(X1, Y1, Z - helrad/2) :
  203.   pt8 = VECTOR(X, Y, Z - helrad) :
  204.   hell = hell + LIST(POLY(LIST(pt1,
  205.                                pt2,
  206.                                pt6,
  207.                                pt5
  208.                                    ), FALSE),
  209.                      POLY(LIST(pt2,
  210.                                pt3,
  211.                                pt7,
  212.                                pt6
  213.                                    ), FALSE),
  214.                      POLY(LIST(pt3,
  215.                                pt4,
  216.                                pt8,
  217.                                pt7
  218.                                    ), FALSE)) :
  219.   hellix = convex(MERGEPOLY(hell)) :
  220.   COLOR(hellix, YELLOW) :
  221.   return = hellix ;
  222.  
  223. view_tree = LIST(bubble() * TRANS(VECTOR(0, 0, 0.4)),
  224.                  bottle() * TRANS(VECTOR(0, 0, 0.4)),
  225.                  mustasche() * TRANS(VECTOR(0, 0, 0.4)),
  226.                  hell(0.3 - helrad, 5) * TRANS(VECTOR(0, 0, 0.1)),
  227.                  plug());
  228.  
  229. viewdclear();
  230. viewobj(view_tree);
  231.