⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.cpp

📁 英特尔&#174 线程构建模块(英特尔&#174 TBB)是一个屡获殊荣的 C++ 运行时库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void * GetTexBody(FILE * dfile) {  char tmp[255];  float a,b,c,d, phong, phongexp, phongtype;  apitexture tex;  void * voidtex;   errcode rc;  rc = GetString(dfile, "AMBIENT");  fscanf(dfile, "%f", &a);   tex.ambient=a;  rc |= GetString(dfile, "DIFFUSE");  fscanf(dfile, "%f", &b);  tex.diffuse=b;  rc |= GetString(dfile, "SPECULAR");  fscanf(dfile, "%f", &c);  tex.specular=c;  rc |= GetString(dfile, "OPACITY");  fscanf(dfile, "%f", &d);    tex.opacity=d;  fscanf(dfile, "%s", tmp);  if (!stringcmp("PHONG", tmp)) {    fscanf(dfile, "%s", tmp);    if (!stringcmp("METAL", tmp)) {      phongtype = RT_PHONG_METAL;    }    else if (!stringcmp("PLASTIC", tmp)) {      phongtype = RT_PHONG_PLASTIC;    }    else {      phongtype = RT_PHONG_PLASTIC;    }     fscanf(dfile, "%f", &phong);    GetString(dfile, "PHONG_SIZE");    fscanf(dfile, "%f", &phongexp);    fscanf(dfile, "%s", tmp);  }       else {     phong = 0.0;    phongexp = 100.0;    phongtype = RT_PHONG_PLASTIC;  }    fscanf(dfile, "%f %f %f", &a, &b, &c);  tex.col.r = a;  tex.col.g = b;  tex.col.b = c;   rc |= GetString(dfile, "TEXFUNC");  fscanf(dfile, "%d", &tex.texturefunc);  if (tex.texturefunc >= 7) {    /* if its an image map, we need a filename */    fscanf(dfile, "%s", tex.imap);  }  if (tex.texturefunc != 0) {    rc |= GetString(dfile, "CENTER");    rc |= GetVector(dfile, &tex.ctr);    rc |= GetString(dfile, "ROTATE");    rc |= GetVector(dfile, &tex.rot);    rc |= GetString(dfile, "SCALE");    rc |= GetVector(dfile, &tex.scale);  }  if (tex.texturefunc == 9) {    rc |= GetString(dfile, "UAXIS");    rc |= GetVector(dfile, &tex.uaxs);    rc |= GetString(dfile, "VAXIS");    rc |= GetVector(dfile, &tex.vaxs);  }  voidtex = rt_texture(&tex);  rt_tex_phong(voidtex, phong, phongexp, (int) phongtype);  return voidtex;}static errcode GetLight(FILE * dfile) {  apiflt rad;  vector ctr;  apitexture tex;  float a;   errcode rc;  memset(&tex, 0, sizeof(apitexture));   rc = GetString(dfile,"CENTER");   rc |= GetVector(dfile, &ctr);   rc |= GetString(dfile,"RAD");  fscanf(dfile,"%f",&a);  /* read in radius */   rad=a;  rc |= GetColor(dfile, &tex.col);    rt_light(rt_texture(&tex), ctr, rad);  return rc;}static errcode GetBackGnd(FILE * dfile) {  float r,g,b;    fscanf(dfile, "%f %f %f", &r, &g, &b);  scenebackcol.r=r;  scenebackcol.g=g;  scenebackcol.b=b;  return PARSENOERR;}static errcode GetCylinder(FILE * dfile) {  apiflt rad;  vector ctr, axis;  void * tex;  float a;  errcode rc;  rc = GetString(dfile, "CENTER");  rc |= GetVector(dfile, &ctr);  rc |= GetString(dfile, "AXIS");  rc |= GetVector(dfile, &axis);  rc |= GetString(dfile, "RAD");  fscanf(dfile, "%f", &a);  rad=a;  rc |= GetTexture(dfile, &tex);  rt_cylinder(tex, ctr, axis, rad);   return rc;}static errcode GetFCylinder(FILE * dfile) {  apiflt rad;  vector ctr, axis;  vector pnt1, pnt2;  void * tex;  float a;  errcode rc;  rc = GetString(dfile, "BASE");  rc |= GetVector(dfile, &pnt1);  rc |= GetString(dfile, "APEX");  rc |= GetVector(dfile, &pnt2);  ctr=pnt1;  axis.x=pnt2.x - pnt1.x;   axis.y=pnt2.y - pnt1.y;  axis.z=pnt2.z - pnt1.z;  rc |= GetString(dfile, "RAD");  fscanf(dfile, "%f", &a);  rad=a;  rc |= GetTexture(dfile, &tex);  rt_fcylinder(tex, ctr, axis, rad);   return rc;} static errcode GetPolyCylinder(FILE * dfile) {  apiflt rad;  vector * temp;  void * tex;  float a;  int numpts, i;  errcode rc;  rc = GetString(dfile, "POINTS");  fscanf(dfile, "%d", &numpts);  temp = (vector *) malloc(numpts * sizeof(vector));  for (i=0; i<numpts; i++) {    rc |= GetVector(dfile, &temp[i]);  }           rc |= GetString(dfile, "RAD");  fscanf(dfile, "%f", &a);  rad=a;  rc |= GetTexture(dfile, &tex);  rt_polycylinder(tex, temp, numpts, rad);   free(temp);  return rc;} static errcode GetSphere(FILE * dfile) {  apiflt rad;  vector ctr;  void * tex;  float a;  errcode rc;   rc = GetString(dfile,"CENTER");  rc |= GetVector(dfile, &ctr);   rc |= GetString(dfile, "RAD");  fscanf(dfile,"%f",&a);   rad=a;  rc |= GetTexture(dfile, &tex);    rt_sphere(tex, ctr, rad);  return rc;}static errcode GetPlane(FILE * dfile) {  vector normal;  vector ctr;  void * tex;  errcode rc;  rc = GetString(dfile, "CENTER");  rc |= GetVector(dfile, &ctr);  rc |= GetString(dfile, "NORMAL");  rc |= GetVector(dfile, &normal);  rc |= GetTexture(dfile, &tex);  rt_plane(tex, ctr, normal);  return rc;}static errcode GetVol(FILE * dfile) {  vector min, max;  int x,y,z;    char fname[255];  void * tex;  errcode rc;   rc = GetString(dfile, "MIN");  rc |= GetVector(dfile, &min);  rc |= GetString(dfile, "MAX");  rc |= GetVector(dfile, &max);  rc |= GetString(dfile, "DIM");  fscanf(dfile, "%d %d %d ", &x, &y, &z);  rc |= GetString(dfile, "FILE");  fscanf(dfile, "%s", fname);    rc |= GetTexture(dfile, &tex);   rt_scalarvol(tex, min, max, x, y, z, fname, NULL);   return rc;}static errcode GetBox(FILE * dfile) {  vector min, max;  void * tex;  errcode rc;  rc = GetString(dfile, "MIN");  rc |= GetVector(dfile, &min);  rc |= GetString(dfile, "MAX");  rc |= GetVector(dfile, &max);  rc |= GetTexture(dfile, &tex);  rt_box(tex, min, max);  return rc;}static errcode GetRing(FILE * dfile) {  vector normal;  vector ctr;  void * tex;  float a,b;  errcode rc;   rc = GetString(dfile, "CENTER");  rc |= GetVector(dfile, &ctr);  rc |= GetString(dfile, "NORMAL");  rc |= GetVector(dfile, &normal);  rc |= GetString(dfile, "INNER");  fscanf(dfile, " %f ", &a);  rc |= GetString(dfile, "OUTER");  fscanf(dfile, " %f ", &b);  rc |= GetTexture(dfile, &tex);   rt_ring(tex, ctr, normal, a, b);  return rc;}static errcode GetTri(FILE * dfile) {  vector v0,v1,v2;  void * tex;  errcode rc;  rc = GetString(dfile, "V0");  rc |= GetVector(dfile, &v0);  rc |= GetString(dfile, "V1");  rc |= GetVector(dfile, &v1);  rc |= GetString(dfile, "V2");  rc |= GetVector(dfile, &v2);  rc |= GetTexture(dfile, &tex);  rt_tri(tex, v0, v1, v2);  return rc;}static errcode GetSTri(FILE * dfile) {  vector v0,v1,v2,n0,n1,n2;  void * tex;  errcode rc;  rc = GetString(dfile, "V0");  rc |= GetVector(dfile, &v0);  rc |= GetString(dfile, "V1");  rc |= GetVector(dfile, &v1);  rc |= GetString(dfile, "V2");  rc |= GetVector(dfile, &v2);    rc |= GetString(dfile, "N0");  rc |= GetVector(dfile, &n0);  rc |= GetString(dfile, "N1");  rc |= GetVector(dfile, &n1);  rc |= GetString(dfile, "N2");  rc |= GetVector(dfile, &n2);  rc |= GetTexture(dfile, &tex);    rt_stri(tex, v0, v1, v2, n0, n1, n2);  return rc;}static errcode GetLandScape(FILE * dfile) {  void * tex;  vector ctr;  apiflt wx, wy;  int m, n;  float a,b;  errcode rc;  rc = GetString(dfile, "RES");  fscanf(dfile, "%d %d", &m, &n);  rc |= GetString(dfile, "SCALE");  fscanf(dfile, "%f %f", &a, &b);     wx=a;  wy=b;  rc |= GetString(dfile, "CENTER");  rc |= GetVector(dfile, &ctr);  rc |= GetTexture(dfile, &tex);  rt_landscape(tex, m, n, ctr, wx, wy);  return rc;}static errcode GetTPolyFile(FILE * dfile) {  void * tex;  vector ctr, rot, scale;  vector v1, v2, v0;  char ifname[255];  FILE *ifp;  int v, totalpolys;  RotMat RotA;  errcode rc;  totalpolys=0;  rc = GetString(dfile, "SCALE");   rc |= GetVector(dfile, &scale);  rc |= GetString(dfile, "ROT");  rc |= GetVector(dfile, &rot);  degvectoradvec(&rot);   InitRot3d(&RotA, rot.x, rot.y, rot.z);  rc |= GetString(dfile, "CENTER");  rc |= GetVector(dfile, &ctr);  rc |= GetString(dfile, "FILE");  fscanf(dfile, "%s", ifname);  rc |= GetTexture(dfile, &tex);  if ((ifp=fopen(ifname, "r")) == NULL) {    fprintf(stderr, "Can't open data file %s for input!! Aborting...\n", ifname);    return PARSEBADSUBFILE;  }  while (!feof(ifp)) {    fscanf(ifp, "%d", &v);    if (v != 3) { break; }    totalpolys++;    v=0;          rc |= GetVector(ifp, &v0);    rc |= GetVector(ifp, &v1);    rc |= GetVector(ifp, &v2);    Scale3d(&scale, &v0);    Scale3d(&scale, &v1);    Scale3d(&scale, &v2);    Rotate3d(&RotA, &v0);     Rotate3d(&RotA, &v1);     Rotate3d(&RotA, &v2);     Trans3d(&ctr, &v0);    Trans3d(&ctr, &v1);    Trans3d(&ctr, &v2);    rt_tri(tex, v1, v0, v2);  }  fclose(ifp);  return rc;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -