next up previous contents index
Next: More Mirage Features Up: Creating a Mirage Scene Previous: Routines for Creating a

Satellite Example Scene

  This section shows you the code and resulting image for a satellite. The satellite uses many of the features that have been described this far. Figure 11 is a picture of the satellite.

  figure340
Figure 11: Satellite

  // The lighting is set just as in the newmirage project.
  vector focus_position = {0, 0, 0};
  vector camera_position = {20, 14, 8};
  the_object = the_satellite();
  LINK(the_scene, PLUS, the_object);

  .
  .
  .

object the_satellite(void) {
  object body, dish, solar, arm, cutter, spike, extra_bit;
  object S;

  body = stretch(1.0, 1.0, 0.5, shift(0.0, 0.0, 1.0, new_cube()));
  extra_bit = stretch(0.75, 0.57, 1.75, shift(0.0, 0.0, -1.0, new_unitcyl()));
  LINK(body, PLUS, bind(extra_bit));
  extra_bit = shift(0.0, 0.0, -0.75,stretch(1.25, 0.25, 0.5, new_cube()));
  LINK(body, PLUS, bind(extra_bit));
  LINK(body, PLUS,  rotate(X, Y, 60, bind(extra_bit)))
  LINK(body, PLUS, rotate(X, Y, 120, bind(extra_bit)));
  body = bind(body);
  body->material = grey;
  extra_bit = stretch(1.0, 1.0, 1.5, shift(0.0, 0.0, -1.0, new_unitcyl()));
  extra_bit->material = ltgrey;
  LINK(body, PLUS, bind(extra_bit));
  body = bind(body);

  dish = shift(0.0, 0.0, 1.0, new_sphere());
  dish->material = dkgrey;
  cutter = shift(0.0, 0.0, 1.2, new_sphere());
  cutter->material = ltgrey;
  LINK(dish, PAINTMINUS, bind(cutter));
  cutter = rotate(X, Z, 90, new_torus(1.0, 0.02));
  cutter = shift(0.0, 0.0, 1.22, bind(cutter));
  LINK(cutter, PLUS, shift(0.0, 0.0, -0.2, bind(cutter)));
  LINK(dish, MINUS, bind(cutter));  
  cutter = rotate(X, Y, 30, bind(cutter));
  LINK(dish, MINUS, bind(cutter));  
  cutter = rotate(X, Y, 30, bind(cutter));
  LINK(dish, MINUS, bind(cutter));  
  cutter = rotate(X, Y, 30, bind(cutter));
  LINK(dish, MINUS, bind(cutter));  
  cutter = rotate(X, Y, 30, bind(cutter));
  LINK(dish, MINUS, bind(cutter));  
  cutter = rotate(X, Y, 30, bind(cutter));
  LINK(dish, MINUS, bind(cutter));  
  cutter = rotate(X, Y, 30, bind(cutter));
  LINK(dish, MINUS, bind(cutter));  
  dish = stretch(3.0, 3.0, 1.0, bind(dish));
  spike = new_cone(0.1, 0.0, 5.0);
  spike->material = grey;
  LINK(dish, PLUS, bind(spike));
  dish = shift(0.0, 0.0, 1.0, bind(dish));
  dish = bind(dish);

  solar = bind(shift(0.25, 0.0, 0.25, rotate(Y, Z, 15, 
          stretch(0.5, 5.0, 0.025, shift(0.0, 1.0, 1.0, new_cube())))));
  solar->material = dkgrey;

  arm = stretch(0.1, 0.1, 7.0, new_unitcyl());
  extra_bit = shift(0.0, 0.0, 7.0, scale(0.2, new_cube()));
  LINK(arm, PLUS, bind(extra_bit));
  extra_bit = rotate(X, Y, 45, bind(extra_bit));
  LINK(arm, PLUS, bind(extra_bit));  
  arm = bind(rotate(X, Y, 30, rotate(Z, X, 120, bind(arm))));
  arm->material = dkgrey;

  S = new_nothing();
  LINK(S, PLUS, bind(body));
  LINK(S, PLUS, bind(dish));
  LINK(S, PLUS, bind(solar));
  LINK(S, PLUS, rotate(X, Y, 180, bind(solar)));
  LINK(S, PLUS, bind(arm));

  return bind(S);
}



Sophie Day
Fri Feb 20 15:47:19 NZDT 1998