This is readfile.c in view mode; [Download] [Up]
/* * (c) 1988 by George Kyriazis */ /* * read the input file of the ray-tracer */ #include <stdio.h> #include <math.h> #include "ray.h" readfile(fname) char *fname; { FILE *f; int i, j; int nos, nosq; char s[10]; f = fopen(fname,"r"); if(f == NULL) { perror("fopen"); exit(1); } /* file format is: * <fov> field of view * <eyex eyey eyez> position of the eye * <dirx diry dirz> dorection of view * <upx upy upz> up vector * <time1 time2> time limits * <#> background cuing * <iter> number of iterations per pixel * <x y z angle> coordinates and angle of the light source * number or spheres number of squares * <x y z r [ambient] [diff] [spec] refl r g b refr r g b * width index refl_diffuse refr_diffuse tx ty tz> * for every sphere * <x y z x y z x y z [ambient] [diff] [spec] * refl r g b refr r g b with index * refl_diffuse refr_diffuse tx ty tz> * for every square */ /* viewing transform */ fscanf(f, "%lf", &fov); fov = tan( fov * M_PI / 180 ) / sqrt(2.0); fscanf(f, "%lf %lf %lf", &eye.x, &eye.y, &eye.z); fscanf(f, "%lf %lf %lf", &eye_dir.x, &eye_dir.y, &eye_dir.z); fscanf(f, "%lf %lf %lf", &up.x, &up.y, &up.z); /* time information */ fscanf(f, "%lf %lf", &time1, &time2); /* the background flag */ fscanf(f, "%s", s); if( *s == 'n' ) bgflag = NONE; if( *s == 'x' ) bgflag = X; if( *s == 'y' ) bgflag = Y; if( *s == 'z' ) bgflag = Z; /* how many samples per pixel? */ fscanf(f, "%d", &tries); /* now the light source */ fscanf(f, "%lf %lf %lf %lf", &light.org.x, &light.org.y, &light.org.z, &light.angle); light.angle *= M_PI/180; fscanf(f, "%d %d", &nos, &nosq); noo = nos + nosq; obj = (struct obj *)malloc(noo * sizeof(struct obj) ); if(obj == NULL) { perror("malloc"); exit(1); } i = 0; for(j = 0; j < nos; j++) { obj[i].type = SPHERE; fscanf(f, "%lf %lf %lf %lf", &obj[i].data.sphere.center.x, &obj[i].data.sphere.center.y, &obj[i].data.sphere.center.z, &obj[i].data.sphere.radius ); fscanf(f, "%lf %lf %lf", &obj[i].ambient.r, &obj[i].ambient.g, &obj[i].ambient.b); fscanf(f, "%lf %lf %lf", &obj[i].diffuse.r, &obj[i].diffuse.g, &obj[i].diffuse.b); fscanf(f, "%lf %lf %lf", &obj[i].specular.r, &obj[i].specular.g, &obj[i].specular.b); fscanf(f, "%lf %lf %lf %lf", &obj[i].reflection, &obj[i].refl_color.r, &obj[i].refl_color.g, &obj[i].refl_color.b); fscanf(f, "%lf %lf %lf %lf", &obj[i].refraction, &obj[i].refr_color.r, &obj[i].refr_color.g, &obj[i].refr_color.b); fscanf(f, "%lf %lf", &obj[i].width, &obj[i].index); fscanf(f, "%lf %lf", &obj[i].refl_diffuse, &obj[i].refr_diffuse); obj[i].refl_diffuse *= M_PI / 180; obj[i].refr_diffuse *= M_PI / 180; fscanf(f, "%lf %lf %lf", &obj[i].time.x, &obj[i].time.y, &obj[i].time.z); i++; } for( j = 0; j < nosq; j++) { obj[i].type = SQUARE; fscanf(f, "%lf %lf %lf", &obj[i].data.quad.p1.x, &obj[i].data.quad.p1.y, &obj[i].data.quad.p1.z); fscanf(f, "%lf %lf %lf", &obj[i].data.quad.p2.x, &obj[i].data.quad.p2.y, &obj[i].data.quad.p2.z); fscanf(f, "%lf %lf %lf", &obj[i].data.quad.p3.x, &obj[i].data.quad.p3.y, &obj[i].data.quad.p3.z); fscanf(f, "%lf %lf %lf", &obj[i].ambient.r, &obj[i].ambient.g, &obj[i].ambient.b); fscanf(f, "%lf %lf %lf", &obj[i].diffuse.r, &obj[i].diffuse.g, &obj[i].diffuse.b); fscanf(f, "%lf %lf %lf", &obj[i].specular.r, &obj[i].specular.g, &obj[i].specular.b); fscanf(f, "%lf %lf %lf %lf", &obj[i].reflection, &obj[i].refl_color.r, &obj[i].refl_color.g, &obj[i].refl_color.b); fscanf(f, "%lf %lf %lf %lf", &obj[i].refraction, &obj[i].refr_color.r, &obj[i].refr_color.g, &obj[i].refr_color.b); fscanf(f, "%lf %lf", &obj[i].width, &obj[i].index); fscanf(f, "%lf %lf", &obj[i].refl_diffuse, &obj[i].refr_diffuse); obj[i].refl_diffuse *= M_PI / 180; obj[i].refr_diffuse *= M_PI / 180; fscanf(f, "%lf %lf %lf", &obj[i].time.x, &obj[i].time.y, &obj[i].time.z); i++; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.