📄 parse.cpp
字号:
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 + -