/* * obj2model.c * * Turn Wavefront OBJ files into Thrust3D models * * (c) 2008 Thomas White * * thrust3d - a silly game * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "utils.c" #define MAX_VERTICES 65536 int main(int argc, char *argv[]) { FILE *fh; FILE *out; float vtmp[3*MAX_VERTICES]; float vntmp[3*MAX_VERTICES]; float textmp[2*MAX_VERTICES]; int v_used[MAX_VERTICES]; int vn_used[MAX_VERTICES]; int tex_used[MAX_VERTICES]; int n_vtmp, n_vntmp, n_textmp; int nprev; int i, v_unused, vn_unused, tex_unused; fh = fopen(argv[1], "r"); if ( fh == NULL ) { fprintf(stderr, "Couldn't open '%s'\n", argv[1]); return 1; } for ( i=0; i= n_vtmp ) { fprintf(stderr, "Vertex index is too high (%i/%i)\n", vnum, n_vtmp); continue; } if ( nnum >= n_vntmp ) { fprintf(stderr, "Normal index is too high (%i/%i)\n", nnum, n_vntmp); continue; } fprintf(out, "%+8.3f %+8.3f %+8.3f %8.3f %8.3f %+8.3f %+8.3f %+8.3f\n", vtmp[3*vnum+0], vtmp[3*vnum+1], vtmp[3*vnum+2], textmp[2*tnum+0], textmp[2*tnum+1], vntmp[3*nnum+0], vntmp[3*nnum+1], vntmp[3*nnum+2]); v_used[vnum] = 1; vn_used[nnum] = 1; tex_used[tnum] = 1; free(sp[0]); free(sp[1]); free(sp[2]); free(sp); } else if ( nslash == 0 ) { int vnum; vnum = atoi(bits[i])-1; fprintf(out, "%+8.3f %+8.3f %+8.3f %8.3f %8.3f\n", vtmp[3*vnum+0], vtmp[3*vnum+1], vtmp[3*vnum+2], 0.0, 0.0); v_used[vnum] = 1; } } } for ( i=0; i