Listing 4 (solid.c)

#include "solid.h"

/* global variables */
struct obj_defn *defn_ptr[MAX_TYPES] = {NULL, NULL,
   NULL, NULL}; /* pointers to object definitions */
struct solid_obj *obj_first = (struct solid_obj *)NULL;
   /* pointer to first object in scene */
int sweeps = 20; /* number of sweeps to construct
   sphere; must be even */
int facets = 36; /* number of facets per sweep */
float proj_z = 100.0; /* distance between viewer and
   model */
float proj_d = 10.0; /* distance between viewer and
   picture plane */
BOOL init_screen = FALSE; /* indicates whether screen
   is initialized */
int maxx, maxy; /* maximum x and y screen coords */
float border = 0.05; /* fraction of graphics screen to
   use as a border when maximizing image size */
float screen_x_min, screen_x_max, screen_y_min,
   screen_y_max; /* minimum and maximum coordinates
   used to maximize image size */
int color_bkgd = BLUE, color_visible = RED,
   color_hidden = WHITE; /* color selections for
   background, visible lines, hidden lines */
enum LINESTYLE disp_hidden = LINE_NOSHOW; /* how to
   display hidden lines: don't display, broken line,
   solid line */
float light_x, light_y, light_z; /* light source
   coordinates */
int render_opt = TRUE; /* rendering option */
void main(void)
{
   struct solid_obj *obj_ptr;
   int gdriver = DETECT, gmode;
   if (registerbgidriver(EGAVGA_driver) < 0)
      quit(ERR_DRIVER,_FILE_,_LINE_);
   initgraph(&gdriver, &gmode, "");
   setbkcolor(color_bkgd);
   setcolor(color_visible);
   maxx = getmaxx();
   maxy = getmaxy();
   outtext("Copyright (c) 1991 by Saul Mooallem");
   light_x = 300.0;
   light_y = 300.0;
   light_z = 300.0;
   obj_ptr = make_object(CUBE_OBJ); /* construct
      instance */
   obj_ptr->color = YELLOW;
   obj_ptr->scale = 7.0; /* scaling factor */
   obj_ptr->xlate[0] = 20.0; /* translation */
   obj_ptr->xlate[1] = -20.0;
   obj_ptr->xlate[2] = 15.0;
   obj_ptr->YAW = PI / 8.0; /* rotation */
   obj_ptr->ROLL = PI / 16.0;
   obj_ptr->PITCH = 3.0 * PI / 16.0;
   obj_ptr = make_object(SPHERE_OBJ);
   obj_ptr->color = RED;
   obj_ptr->scale = 30.0;
   obj_ptr->YAW = PI / 4.0;
   obj_ptr->ROLL = 3 * PI / 4.0;
   obj_ptr->PITCH = 3.0 * PI / 8.0;
   obj_ptr->xlate[1] = -12.0;
   obj_ptr = make_object(CYLIND_OBJ);
   obj_ptr->color = YELLOW;
   obj_ptr->scale = 6.0;
   obj_ptr->YAW = PI / 4.0;
   obj_ptr->ROLL = PI / 4.0;
   obj_ptr->PITCH = PI / 4.0;
   obj_ptr->xlate[0] = -8.0;
   obj_ptr->xlate[1] = 8.0;
   obj_ptr->xlate[2] = 25.0;
   obj_ptr = make_object(CONE_OBJ);
   obj_ptr->color = RED;
   obj_ptr->scale = 12.0;
   obj_ptr->YAW = 3 * PI / 4.0;
   obj_ptr->ROLL = 7 * PI / 4.0;
   obj_ptr->PITCH = PI / 4.0;
   obj_ptr->xlate[0] = 15.0;
   obj_ptr->xlate[1] = 8.0;
   show_scene();
   getch();
   closegraph();
}
/* End of File */