#include #include #include #include #include #include class obj_t { public: double (*hits)(void); void (*uninorm)(void); /* Optional plugins for retrieval of reflectivity */ /* useful for the ever-popular tiled floor */ void (*getamb)(void); void (*getdiff)(void); void (*getspec)(void); private: class obj_t *next; int objid; int objtype; double ambient[3]; /* Reflectivity for materials */ double diffuse[3]; double specular[3]; double emissivity[3]; /* For lights */ void *priv; /* Private type-dependent data */ double hitloc[3]; /* Last hit point */ double normal[3]; /* Normal at hit point */ }; class link_t { private: link_t *next; obj_t *obj; }; class list_t { public: void list_t(void); // constructor private: link_t *first; link_t *last; }; class view_t { public: int load_view(FILE *); void print_view(FILE *); private: int win_x_size; int win_y_size; double world_x_size; double world_y_size; double viewpt[3]; }; void list_t::list_t(void) { first = last = NULL; } int view_t::load_view(FILE *in) { int vc; char buf[256]; vc = fscanf(in, "%lf %lf", &world_x_size, &world_y_size); fgets(buf, 256, in); vc += fscanf(in, "%lf %lf %lf", viewpt, viewpt + 1, viewpt + 2); fgets(buf, 256, in); if (vc == 5) return(0); else return(-1); } void view_t::print_view(FILE *out) { fprintf(out, "World to window mapping \n"); fprintf(out, "%6.0lf %6.0lf \n", world_x_size, world_y_size); fprintf(out, "\nViewpoint \n"); fprintf(out, "%6.1lf %6.1lf %6.1lf\n", viewpt[0], viewpt[1], viewpt[2]); return; } int main() { view_t *v; v = new view_t; v->load_view(stdin); v->print_view(stdout); }