--- ray/src/cv/mgflib/3ds2mgf.c 1996/02/08 13:29:33 1.2 +++ ray/src/cv/mgflib/3ds2mgf.c 2003/11/15 17:54:06 1.7 @@ -1,3 +1,6 @@ +#ifndef lint +static const char RCSid[] = "$Id: 3ds2mgf.c,v 1.7 2003/11/15 17:54:06 schorsch Exp $"; +#endif /* 3DS2POV.C Copyright (c) 1996 Steve Anger and Jeff Bowermaster MGF output added by Greg Ward @@ -10,10 +13,6 @@ Compiled with MSDOS GNU C++ 2.4.1 or generic ANSI-C compiler */ -#ifndef lint -static char SCCSid[] = "$SunId$ LBL"; -#endif - #include #include #include @@ -47,8 +46,8 @@ extern unsigned _stklen = 16384; #define MGF 4 #define RAW 99 -#define DEG(x) ((180.0/M_PI)*(x)) -#define RAD(x) ((M_PI/180.0)*(x)) +#define DEG(x) ((double)(180.0/M_PI)*(x)) +#define RAD(x) ((double)(M_PI/180.0)*(x)) #ifndef M_PI #define M_PI (3.14159265358979323846) @@ -351,7 +350,9 @@ char *read_string (void); float findfov (float lens); int read_mgfmatname (char *s, int n, FILE *f); +char *progname; + int main (int argc, char *argv[]) { char meshfname[128]; @@ -453,7 +454,6 @@ int main (int argc, char *argv[]) void process_args (int argc, char *argv[]) { int i; - char *progname; char *env_opt, *option; printf("\n\nAutodesk 3D Studio to Raytracer file Translator. Feb/96\n"); @@ -473,7 +473,7 @@ void process_args (int argc, char *argv[]) printf (" -b - Convert this object as a box\n"); printf (" +i, -i - Turn internal bounding on or off\n"); printf (" +v, -v - Turn verbose status messages on or off\n"); - printf (" -op - Output to POV-Ray 2.0 format (default)\n"); + printf (" -op - Output to POV-Ray 2.0 format\n"); printf (" -op1 - Output to POV-Ray 1.0 format\n"); printf (" -ov - Output to Vivid format\n"); printf (" -ol - Output to poLyray format\n"); @@ -497,7 +497,7 @@ void process_args (int argc, char *argv[]) else if (!strcmp(progname, "3ds2raw")) format = RAW; else - format = MGF; /* default if program name strange */ + format = POV20; /* default if program name strange */ strcpy (inname, ""); strcpy (outname, ""); @@ -926,6 +926,9 @@ void write_summary (FILE *f) case MGF: comstr = "# "; break; + default: + printf ("Illegal format in write_summary() '%c'\n", format); + exit(1); } fprintf (f, "%s Object CenterX CenterY CenterZ LengthX LengthY LengthZ\n", comstr); fprintf (f, "%s ---------- ---------- ---------- ---------- ---------- ---------- ----------\n", comstr); @@ -1011,7 +1014,7 @@ void write_light (FILE *f, char *name, Vector pos, Col if (name[0]) fprintf (f, "o %s\n", name); fprintf (f, "m\n\tsides 1\n\tc\n\t\t\tcmix %.3f R %.3f G %.3f B\n\ted %e\n", CIE_Y_r*col.red, CIE_Y_g*col.green, CIE_Y_b*col.blue, - 10000.0*(CIE_Y_r*col.red + CIE_Y_g*col.green + CIE_Y_b*col.blue)); + 100000.0*(CIE_Y_r*col.red + CIE_Y_g*col.green + CIE_Y_b*col.blue)); fprintf (f, "v c =\n\tp %.4f %.4f %.4f\nsph c .01\n", pos[X], pos[Y], pos[Z]); if (name[0]) fprintf (f, "o\n"); @@ -1086,7 +1089,7 @@ void write_spot (FILE *f, char *name, Vector pos, Vect fprintf (f, "# hotspot: %.2f\n# falloff: %.2f\n", hotspot, falloff); fprintf (f, "m\n\tsides 1\n\tc\n\t\t\tcmix %.3f R %.3f G %.3f B\n\ted %e\n", CIE_Y_r*col.red, CIE_Y_g*col.green, CIE_Y_b*col.blue, - 10000.0*(CIE_Y_r*col.red + CIE_Y_g*col.green + CIE_Y_b*col.blue)); + 100000.0*(CIE_Y_r*col.red + CIE_Y_g*col.green + CIE_Y_b*col.blue)); fprintf (f, "v c =\n\tp %.4f %.4f %.4f\n\tn %.4f %.4f %.4f\n", pos[X], pos[Y], pos[Z], target[X]-pos[X], target[Y]-pos[Y], target[Z]-pos[Z]); @@ -1600,7 +1603,6 @@ void write_mgf_material (FILE *f, MatProp *m) /* Write a mesh file */ void write_mesh (FILE *f, Mesh *mesh) { - FILE *fi; int i; char curmat[80]; Vector va, vb, vc; @@ -2376,7 +2378,10 @@ void parse_3ds (Chunk *mainchunk) do { start_chunk (&chunk); - + if (feof(in)) { + fprintf(stderr, "%s: unexpected EOF\n", progname); + break; + } if (chunk.end <= mainchunk->end) { switch (chunk.tag) { case 0x3D3D: parse_mdata (&chunk);