unsigned int readmodel(char * modelfile, SceneHandle scene) { FILE * dfile; errcode rc; reset_tex_table(); dfile=NULL; dfile=fopen(modelfile,"r"); if (dfile==NULL) { return PARSEBADFILE; } rc = GetScenedefs(dfile, scene); if (rc != PARSENOERR) { fclose(dfile); return rc; } scenebackcol.r = 0.0; /* default background is black */ scenebackcol.g = 0.0; scenebackcol.b = 0.0; numobjectsparsed=0; while ((rc = GetObject(dfile, scene)) == PARSENOERR) { numobjectsparsed++; } fclose(dfile); if (rc == PARSEEOF) rc = PARSENOERR; rt_background(scene, scenebackcol); return rc; }
static errcode GetBackGnd(parsehandle * ph, SceneHandle scene) { float r,g,b; apicolor scenebackcol; fscanf(ph->ifp, "%f %f %f", &r, &g, &b); scenebackcol.r=r; scenebackcol.g=g; scenebackcol.b=b; rt_background(scene, scenebackcol); return PARSENOERR; }
int NFFGetScenedefs(FILE * dfile, SceneHandle scene) { apivector Ccenter, Cview, Cup; apiflt zoom, aspectratio; int raydepth, antialiasing; int xres, yres, verbose; apivector lookat; float vangle, hither; NFFGetString(dfile, "from"); NFFGetVector(dfile, &Ccenter); NFFGetString(dfile, "at"); NFFGetVector(dfile, &lookat); Cview.x = lookat.x - Ccenter.x; Cview.y = lookat.y - Ccenter.y; Cview.z = lookat.z - Ccenter.z; NFFGetString(dfile, "up"); NFFGetVector(dfile, &Cup); NFFGetString(dfile, "angle"); fscanf(dfile, "%f", &vangle); zoom = 1.0; /* XXX fix me later */ aspectratio = 1.0; NFFGetString(dfile, "hither"); fscanf(dfile, "%f", &hither); NFFGetString(dfile, "resolution"); fscanf(dfile, "%d %d", &xres, &yres); antialiasing = 0; raydepth = 6; verbose = 0; rt_outputfile(scene, "outfile.tga"); rt_resolution(scene, xres, yres); rt_verbose(scene, verbose); rt_camera_setup(scene, zoom, aspectratio, antialiasing, raydepth, Ccenter, Cview, Cup); rt_background(scene, backgr); return NFFNOERR; }
unsigned int ParseAC3D(char * modelfile, SceneHandle scene) { FILE * dfile; char filehdr[255]; errcode rc; reset_tex_table(); dfile=NULL; dfile=fopen(modelfile,"r"); if (dfile==NULL) { return PARSEBADFILE; } fscanf(dfile, "%s", filehdr); if (strcmp(filehdr, "AC3Db")) { printf("Unknown version of AC3D Model File Format\n"); fclose(dfile); return PARSEBADFILE; } rc = GetScenedefs(dfile, scene); if (rc != PARSENOERR) return rc; scenebackcol.r = 0.0; /* default background is black */ scenebackcol.g = 0.0; scenebackcol.b = 0.0; numobjectsparsed=0; while ((rc = GetScene(dfile, scene)) == PARSENOERR) { numobjectsparsed++; } fclose(dfile); if (rc == PARSEEOF) rc = PARSENOERR; rt_background(scene, scenebackcol); return rc; }
unsigned int ParseNFF(char *nffname, SceneHandle scene) { FILE * dfile; backgr.r = 0.0; backgr.g = 0.0; backgr.b = 0.0; if (nffname == NULL) { return NFFBADFILE; } else { dfile=fopen(nffname,"r"); if (dfile==NULL) { return NFFBADFILE; } } while (NFFGetObject(dfile, scene) == NFFNOERR); rt_background(scene, backgr); return NFFNOERR; }
/* allocate and initialize a scene with default parameters */ SceneHandle rt_newscene(void) { scenedef * scene; SceneHandle voidscene; apicolor bgcolor = rt_color(0.0, 0.0, 0.0); apicolor ambcolor = rt_color(1.0, 1.0, 1.0); scene = (scenedef *) malloc(sizeof(scenedef)); memset(scene, 0, sizeof(scenedef)); /* clear all valuas to 0 */ voidscene = (SceneHandle) scene; rt_outputfile(voidscene, "/tmp/outfile.tga"); /* default output file */ rt_crop_disable(voidscene); /* disable cropping */ rt_outputformat(voidscene, RT_FORMAT_TARGA); /* default iamge format */ rt_resolution(voidscene, 512, 512); /* 512x512 resolution */ rt_verbose(voidscene, 0); /* verbose messages off */ rt_image_gamma(voidscene, 2.2f); /* set default gamma */ rt_image_clamp(voidscene); /* clamp image colors */ #if 1 rt_rawimage_rgb96f(voidscene, NULL); /* raw image output off */ #else rt_rawimage_rgb24(voidscene, NULL); /* raw image output off */ #endif rt_boundmode(voidscene, RT_BOUNDING_ENABLED); /* spatial subdivision on */ rt_boundthresh(voidscene, BOUNDTHRESH); /* default threshold */ rt_camera_setup(voidscene, 1.0, 1.0, 0, 6, rt_vector(0.0, 0.0, 0.0), rt_vector(0.0, 0.0, 1.0), rt_vector(0.0, 1.0, 0.0)); rt_camera_dof(voidscene, 1.0, 0.0); rt_shadermode(voidscene, RT_SHADER_AUTO); rt_rescale_lights(voidscene, 1.0); rt_phong_shader(voidscene, RT_SHADER_BLINN); rt_background(voidscene, bgcolor); rt_background_sky_sphere(voidscene, rt_vector(0.0, 1.0, 0.0), 0.3, 0, rt_color(0.0, 0.0, 0.0), rt_color(0.0, 0.0, 0.5)); rt_background_mode(voidscene, RT_BACKGROUND_TEXTURE_SOLID); rt_ambient_occlusion(voidscene, 0, ambcolor); /* disable AO by default */ rt_fog_rendering_mode(voidscene, RT_FOG_NORMAL); /* radial fog by default */ rt_fog_mode(voidscene, RT_FOG_NONE); /* disable fog by default */ rt_fog_parms(voidscene, bgcolor, 0.0, 1.0, 1.0); /* use max positive integer for max transparent surface limit by default */ rt_trans_max_surfaces(voidscene,((((int)1) << ((sizeof(int) * 8) - 2))-1)*2); rt_trans_mode(voidscene, RT_TRANS_ORIG); /* set transparency mode */ rt_normal_fixup_mode(voidscene, 0); /* disable normal fixup */ rt_shadow_filtering(voidscene, 1); /* shadow filtering on */ scene->objgroup.boundedobj = NULL; scene->objgroup.unboundedobj = NULL; scene->objgroup.numobjects = 0; scene->texlist = NULL; scene->lightlist = NULL; scene->cliplist = NULL; scene->numlights = 0; scene->scenecheck = 1; scene->parbuf = NULL; scene->threads = NULL; scene->threadparms = NULL; scene->flags = RT_SHADE_NOFLAGS; rt_set_numthreads(voidscene, -1); /* auto determine num threads */ /* number of distributed memory nodes, fills in array of node/cpu info */ scene->nodes = rt_getcpuinfo(&scene->cpuinfo); scene->mynode = rt_mynode(); return scene; }