示例#1
0
文件: main.cpp 项目: ElaraFX/tbb
int useoptions(argoptions * opt, SceneHandle scene) {
  if (opt->useoutfilename == 1) {
    rt_outputfile(scene, opt->outfilename);
  }

  if (opt->verbosemode == 1) {
    rt_verbose(scene, 1);
  }

  if (opt->antialiasing != -1) {
    /* need new api code for this */
  } 

  if (opt->displaymode != -1) {
    rt_displaymode(scene, opt->displaymode);
  }

  if (opt->boundmode != -1) {
    rt_boundmode(scene, opt->boundmode);
  }

  if (opt->boundthresh != -1) {
    rt_boundthresh(scene, opt->boundthresh);
  }

  return 0;
}    
static errcode GetScenedefs(parsehandle * ph, SceneHandle scene) {
  int xres, yres;
  errcode rc = PARSENOERR;

  rc |= GetString(ph, "BEGIN_SCENE"); 
  
  rc |= GetString(ph, "RESOLUTION");
  fscanf(ph->ifp, "%d %d", &xres, &yres);

  rt_outputfile(scene, "outfile.tga");
  rt_resolution(scene, xres, yres);
  rt_verbose(scene, 0);

  return rc;
}
static errcode GetScenedefs(FILE * dfile, SceneHandle scene) {
  apivector Ccenter, Cview, Cup;
  apiflt zoom, aspectratio;
  int raydepth, antialiasing;

  rt_outputfile(scene, "outfile.tga");
  rt_resolution(scene, 512, 512);
  rt_verbose(scene, 0);

  zoom=1.0;
  aspectratio=1.0;
  antialiasing=0;
  raydepth=6;

  Ccenter.x = 0.0;
  Ccenter.y = 0.0;
  Ccenter.z = -5.0;

  Cview.x = 0.0;
  Cview.y = 0.0;
  Cview.z = 1.0;

  Cup.x = 0.0;
  Cup.y = 1.0;
  Cup.z = 0.0;

  rt_camera_setup(scene, zoom, aspectratio, antialiasing, raydepth,
              Ccenter, Cview, Cup);

  { /* lighting hack */
    apivector ctr;
    apitexture tex;

    memset(&tex, 0, sizeof(apitexture));

    tex.col.r = 1.0;
    tex.col.g = 1.0;
    tex.col.b = 1.0;
    ctr.x = 0.0;
    ctr.y = 0.0;
    ctr.z = -100.0;
 
    rt_light(scene, rt_texture(scene, &tex), ctr, 1.0);
  }

  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; 
}
示例#5
0
SceneHandle rt_newscene(void) {
  scenedef * scene;
  SceneHandle voidscene;

  scene = (scenedef *) malloc(sizeof(scenedef));
  memset(scene, 0, sizeof(scenedef));             /* clear all valuas to 0  */

  voidscene = (SceneHandle) scene;

  rt_outputfile(voidscene, "/dev/null");   /* default output file (.tga)   */
  rt_resolution(voidscene, 512, 512);             /* 512x512 resolution     */
  rt_verbose(voidscene, 0);                       /* verbose messages off   */
  rt_rawimage(voidscene, NULL);                   /* raw image output off   */
  rt_boundmode(voidscene, RT_BOUNDING_ENABLED);   /* spatial subdivision on */
  rt_boundthresh(voidscene, MAXOCTNODES);         /* default threshold      */
  rt_displaymode(voidscene, RT_DISPLAY_ENABLED);  /* video output on        */
  rt_camerasetup(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));
 
  return scene;
}
示例#6
0
void rt_scenesetup(SceneHandle voidscene, char * outname, int hres, int vres, int verbose) {
  rt_outputfile(voidscene, outname);
  rt_resolution(voidscene, hres, vres);
  rt_verbose(voidscene, verbose);
}
示例#7
0
文件: api.c 项目: taohonker/Ovito
/* 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;
}
示例#8
0
int ray(int argc, char **argv) {
#else
int main(int argc, char **argv) {
#endif
    SceneHandle scene;
    unsigned int rc;
    argoptions opt;
    char * filename;
    int node, fileindex;
    rt_timerhandle parsetimer;
    size_t len;

    node = rt_initialize(&argc, &argv);

    rt_set_ui_message(my_ui_message);
    rt_set_ui_progress(my_ui_progress);

    if (node == 0) {
        printf("Tachyon Parallel/Multiprocessor Ray Tracer   Version %s   \n",
               TACHYON_VERSION_STRING);
        printf("Copyright 1994-2010,    John E. Stone <*****@*****.**> \n");
        printf("------------------------------------------------------------ \n");
    }

    if ((rc = getargs(argc, argv, &opt, node)) != 0) {
        rt_finalize();
        exit(rc);
    }

    if (opt.numfiles > 1) {
        printf("Rendering %d scene files.\n", opt.numfiles);
    }

    for (fileindex=0; fileindex<opt.numfiles; fileindex++) {
        scene = rt_newscene();

        /* process command line overrides */
        presceneoptions(&opt, scene);

        filename = opt.filenames[fileindex];

        if (opt.numfiles > 1) {
            printf("\nRendering scene file %d of %d, %s\n", fileindex+1, opt.numfiles, filename);
        }

        parsetimer=rt_timer_create();
        rt_timer_start(parsetimer);

        len = strlen(filename);

        if (len > 4 && (!strcmp(filename+len-4, ".nff") ||
                        !strcmp(filename+len-4, ".NFF"))) {
            rc = ParseNFF(filename, scene); /* must be an NFF file */
        }
        else if (len > 3 && (!strcmp(filename+len-3, ".ac") ||
                             !strcmp(filename+len-3, ".AC"))) {
            rc = ParseAC3D(filename, scene); /* Must be an AC3D file */
        }
#ifdef USELIBMGF
        else if (len > 4 && (!strcmp(filename+len-4, ".mgf") ||
                             !strcmp(filename+len-4, ".MGF"))) {
            rc = ParseMGF(filename, scene, 1); /* Must be an MGF file */
        }
#endif
        else {
            rc = readmodel(filename, scene); /* Assume its a Tachyon scene file */
        }

        rt_timer_stop(parsetimer);
        if (rc == PARSENOERR && node == 0)
            printf("Scene Parsing Time: %10.4f seconds\n", rt_timer_time(parsetimer));
        rt_timer_destroy(parsetimer);

        if (rc != PARSENOERR && node == 0) {
            switch(rc) {
            case PARSEBADFILE:
                printf("Parser failed due to nonexistent input file: %s\n", filename);
                break;
            case PARSEBADSUBFILE:
                printf("Parser failed due to nonexistent included file.\n");
                break;
            case PARSEBADSYNTAX:
                printf("Parser failed due to an input file syntax error.\n");
                break;
            case PARSEEOF:
                printf("Parser unexpectedly hit an end of file.\n");
                break;
            case PARSEALLOCERR:
                printf("Parser ran out of memory.\n");
                break;
            }
            if (fileindex+1 < opt.numfiles)
                printf("Aborting render, continuing with next scene file...\n");
            else
                printf("Aborting render.\n");

            rt_deletescene(scene); /* free the scene */
            continue;              /* process the next scene */
        }

        /* process command line overrides */
        postsceneoptions(&opt, scene);

        /* choose which rendering mode to use */
        if (opt.usecamfile == 1) {
            return animate_scene(opt, scene, node); /* fly using prerecorded data */
        }
        else if (strlen(opt.spaceball) > 0) {
            return fly_scene(opt, scene, node);     /* fly with spaceball etc */
        }
        else {
            if (opt.numfiles > 1 && opt.nosave != 1) {
                char multioutfilename[FILENAME_MAX];
                sprintf(multioutfilename, opt.outfilename, fileindex);
                rt_outputfile(scene, multioutfilename);
            }

            rt_renderscene(scene); /* Render a single frame */
        }

        rt_deletescene(scene);   /* free the scene, get ready for next one */
    }

    rt_finalize();             /* close down the rendering library and MPI */
    freeoptions(&opt);         /* free parsed command line option data */

    return 0;
}
示例#9
0
/*
 * main loop for creating animations by playing recorded camera fly-throughs
 */
static int animate_scene(argoptions opt, SceneHandle scene, int node) {
    char outfilename[1000];
    FILE * camfp;
    dispHandle * dh = NULL;

    if (node == 0)
        dh = tachyon_display_create(scene);

    /* if we have a camera file, then animate.. */
    if ((camfp = fopen(opt.camfilename, "r")) != NULL) {
        floatvec cv, cu, cc;
        apivector cmv, cmu, cmc;
        int frameno = 0;
        float fps;
        rt_timerhandle fpstimer;
        rt_timerhandle animationtimer;

        rt_set_ui_message(NULL);
        rt_set_ui_progress(NULL);

        if (node == 0)
            printf("Running Camera File: %s\n", opt.camfilename);

        fpstimer=rt_timer_create();
        animationtimer=rt_timer_create();

        rt_timer_start(animationtimer);

        while (!feof(camfp)) {
            fscanf(camfp, "%f %f %f  %f %f %f  %f %f %f",
                   &cv.x, &cv.y, &cv.z, &cu.x, &cu.y, &cu.z, &cc.x, &cc.y, &cc.z);

            cmv.x = cv.x;
            cmv.y = cv.y;
            cmv.z = cv.z;
            cmu.x = cu.x;
            cmu.y = cu.y;
            cmu.z = cu.z;
            cmc.x = cc.x;
            cmc.y = cc.y;
            cmc.z = cc.z;

            if (frameno != 0) {
                rt_timer_stop(fpstimer);
                fps = 1.0f / rt_timer_time(fpstimer);
            } else {
                fps = 0.0;
            }

            rt_timer_start(fpstimer);
            outfilename[0] = '\0';
            if (opt.nosave == 1) {
                if (node == 0) {
                    printf("\rRendering Frame: %9d   %10.4f FPS       ", frameno, fps);
                    fflush(stdout);
                }
            }
            else {
                sprintf(outfilename, opt.outfilename, frameno);
                if (node == 0) {
                    printf("\rRendering Frame to %s   (%10.4f FPS)       ", outfilename, fps);
                    fflush(stdout);
                }
            }

            rt_outputfile(scene, outfilename);
            rt_camera_position(scene, cmc, cmv, cmu);

            rt_renderscene(scene);

            if (dh != NULL)
                tachyon_display_draw(dh);

            frameno++;
        }
        rt_timer_stop(animationtimer);
        fps = frameno / rt_timer_time(animationtimer);
        if (node == 0) {
            printf("\rCompleted animation of %d frames                            \n", frameno);
            printf("Animation Time: %10.4f seconds  (Averaged %7.4f FPS)\n",
                   rt_timer_time(animationtimer), fps);
        }
        rt_timer_destroy(fpstimer);
        fclose(camfp);
    } else {
        if (node == 0) {
            printf("Couldn't open camera file: %s\n", opt.camfilename);
            printf("Aborting render.\n");
        }
        rt_deletescene(scene); /* free the scene */
        rt_finalize(); /* close down the rendering library and MPI */
        return -1;
    }

    if (node == 0) {
        printf("\nFinished Running Camera.\n");

        if (dh !=NULL)
            tachyon_display_delete(dh);
    }

    rt_deletescene(scene); /* free the scene */
    rt_finalize(); /* close down the rendering library and MPI */

    return 0;
}
示例#10
0
/*
 * main loop for creating animations by flying using a spaceball
 * or other 3-D input mechanism.
 */
static int fly_scene(argoptions opt, SceneHandle scene, int node) {
    dispHandle * dh = NULL;
    int done = 0;
    int frameno = 0;
    float fps;
    rt_timerhandle fpstimer;
    rt_timerhandle animationtimer;
    char outfilename[1];

#if defined(USESPACEBALL)
    sbHandle * bh = NULL;
#endif

    if (node == 0)
        dh = tachyon_display_create(scene);

    rt_set_ui_message(NULL);
    rt_set_ui_progress(NULL);

    if (node == 0)
        printf("Interactive Camera Flight\n");

    outfilename[0] = '\0';
    rt_outputfile(scene, outfilename);

    fpstimer=rt_timer_create();
    animationtimer=rt_timer_create();

#if defined(USESPACEBALL)
    if (node == 0) {
#if 1
        bh = tachyon_init_spaceball(scene, opt.spaceball);
#else
        if (rt_numnodes() < 2) {
            bh = tachyon_init_spaceball(scene, opt.spaceball);
        } else {
            printf("WARNING: Spaceball mode disabled when running with distributed memory");
        }
#endif
    }
#endif

    rt_timer_start(animationtimer);
    while (!done) {
        if (frameno != 0) {
            rt_timer_stop(fpstimer);
            fps = 1.0f / rt_timer_time(fpstimer);
        } else {
            fps = 0.0;
        }

        rt_timer_start(fpstimer);
        if (node == 0) {
            printf("\rRendering Frame: %9d   %10.4f FPS       ", frameno, fps);
            fflush(stdout);
        }

#if defined(USESPACEBALL)
        if (bh != NULL)
            done = tachyon_spaceball_update(bh, scene);
#endif

        rt_renderscene(scene);

        if (dh != NULL)
            tachyon_display_draw(dh);

        frameno++;
    }

    rt_timer_stop(animationtimer);
    fps = frameno / rt_timer_time(animationtimer);

    if (node == 0) {
        printf("\rCompleted animation of %d frames                            \n", frameno);
        printf("Animation Time: %10.4f seconds  (Averaged %7.4f FPS)\n",
               rt_timer_time(animationtimer), fps);
    }
    rt_timer_destroy(fpstimer);

    if (node == 0) {
        printf("\nFinished Running Camera.\n");

        if (dh !=NULL)
            tachyon_display_delete(dh);
    }

    rt_deletescene(scene); /* free the scene */
    rt_finalize(); /* close down the rendering library and MPI */

    return 0;
}
int main(int argc, char **argv) {
  SceneHandle scene;
  int i, j;
  apivector Ccenter, Cview, Cup;
  apivector ctr1, ctr2;
  apitexture tex1, tex2;
  void * vtx1, * vtx2;
  char fname[100];

  rt_initialize(&argc, &argv); 

  Ccenter.x=0.0; Ccenter.y=0.0; Ccenter.z=-3.0;
  Cview.x=0.0;   Cview.y=0.0;   Cview.z=1.0;
  Cup.x=0.0;     Cup.y=1.0;     Cup.z=0.0;

  ctr1.x=20.0;  ctr1.y=20.0; ctr1.z=-40.0;
  ctr2.x=-20.0; ctr2.y=20.0; ctr2.z=-40.0;
  
  tex1.col.r=1.0;
  tex1.col.g=0.5;
  tex1.col.b=0.0;
  tex1.ambient=1.0;
  tex1.opacity=1.0;
  tex2=tex1;
  tex2.col.r=0.0;
  tex2.col.b=1.0;

  initspheres();
  
 
  for (i=0; i<MAXFRAMES; i++) {  
    scene = rt_newscene();
    vtx1=rt_texture(scene, &tex1);
    vtx2=rt_texture(scene, &tex2);

    sprintf(fname,"outfile.%4.4d.tga",i);

    if (rt_mynode()==0) printf("Rendering: %s\n", fname);

    rt_outputfile(scene, fname);
    rt_resolution(scene, XRES, YRES);
    rt_verbose(scene, 0);

    rt_camera_setup(scene, 1.0, 1.0, 0, 5, Ccenter, Cview, Cup);

    movesp(); 
    drawsp(scene);

    rt_light(scene, vtx1, ctr1, 1.0);
    rt_light(scene, vtx2, ctr2, 1.0);

    rt_renderscene(scene);

    rt_deletescene(scene);

    for (j=0; j<NUMSP; j++)
      free(sp[i].voidtex);  
  }

  rt_finalize();

  return 0;
}