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

📄 viewer3.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 3 页
字号:
            }            glEndList();            /*colored rays*/            glNewList(nhz*4+4,GL_COMPILE);            for (is=0;is<ns;is++) {                  for (iray=0;iray<ray[is].nrays;iray++) {                        iflag=0;	                glBegin(GL_LINE_STRIP);	                for (it=0;it<ray[is].nseg[iray];it++) {		              if (fabs(ray[is].x[it][iray])<RADIUS &&		                  fabs(ray[is].y[it][iray])<RADIUS &&		                  fabs(ray[is].z[it][iray])<RADIUS) {				    tEmission(					  ray[is].v0[it][iray],					  0.0,     /*tmin*/					  tmax,					  emission);				    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission);				    glVertex3f(					  ray[is].x[it][iray],					  ray[is].y[it][iray],			                  ray[is].z[it][iray]);                                    iflag=1;		              } else if (iflag) break; /*once good, now bad*/    	                }	                glEnd();                  }            }            glEndList();      }      /*************************************************************      Plot the wavefront if it is given. If the wffile does not       contain effective data, ntris may be wild. In this case, do      thing about the wavefront.      *************************************************************/      if (wffp!=NULL) {            fscanf(wffp,"%d = nwf2dump\n",&nwf);            fprintf(stderr,"nwf2dump=%d\n",nwf);            if (nwf>200) wffp=NULL;      }      if (wffp!=NULL) {   	    emission[0]=1.0;            emission[1]=1.0; 	    emission[2]=0.0;	    emission[3]=1.0;	    wf=(Layer *)alloc1float(sizeof(Layer)*nwf);            ntris=ealloc1int(sizeof(int)*nwf);	    for (iwf=0;iwf<nwf;iwf++) {	          if (1!=fscanf(wffp,"%d = ntris\n",&ntris[iwf])) {		        nwf=iwf;                        break;	          }		  if (ntris[iwf]==0) {                        nwf=iwf;                        break;	          }		  if (verbose)			warn("ntris=%d of nwf=%d\n",ntris[iwf],nwf);		  wf[iwf].x=ealloc2float(3,ntris[iwf]);		  wf[iwf].y=ealloc2float(3,ntris[iwf]);		  wf[iwf].z=ealloc2float(3,ntris[iwf]);		  for (it=0;it<ntris[iwf];it++) {                        fscanf(wffp,"%f %f %f %f %f %f %f %f %f\n",                              wf[iwf].x[it],  wf[iwf].y[it],  wf[iwf].z[it],                              wf[iwf].x[it]+1,wf[iwf].y[it]+1,wf[iwf].z[it]+1,                              wf[iwf].x[it]+2,wf[iwf].y[it]+2,wf[iwf].z[it]+2);		  }		  fprintf(stderr,"Totally read in %d wavefront triangles\n",ntris[iwf]);		  for (it=0;it<ntris[iwf];it++) {			for (iw=0;iw<3;iw++) {			      wf[iwf].x[it][iw]=((wf[iwf].x[it][iw]-xmin)/					(xmax-xmin)-0.5)*DIAMETER;			      wf[iwf].y[it][iw]=-((wf[iwf].y[it][iw]-ymin)/					(ymax-ymin)-0.5)*DIAMETER;			      wf[iwf].z[it][iw]=((wf[iwf].z[it][iw]-zmin)/					(zmax-zmin)-0.5)*DIAMETER;			}       	          }	    }	    fclose(wffp);            fprintf(stderr,"Click right MB to get menu\n");            fprintf(stderr,"Click left MB and drag to rotate\n");            fprintf(stderr,"Press shift and push left MB to scale\n");  	    glNewList(nhz*4+6,GL_COMPILE);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission);	    for (iwf=0;iwf<nwf;iwf++) {	          for (itri=0;itri<ntris[iwf];itri++) {		        glBegin(GL_LINE_LOOP);		        if (fabs(wf[iwf].x[itri][0])<RADIUS &&		            fabs(wf[iwf].y[itri][0])<RADIUS &&		            fabs(wf[iwf].z[itri][0])<RADIUS && 		            fabs(wf[iwf].x[itri][1])<RADIUS &&		            fabs(wf[iwf].y[itri][1])<RADIUS &&		            fabs(wf[iwf].z[itri][1])<RADIUS &&                            fabs(wf[iwf].x[itri][2])<RADIUS &&                            fabs(wf[iwf].y[itri][2])<RADIUS &&                            fabs(wf[iwf].z[itri][2])<RADIUS) {			          glVertex3f(wf[iwf].x[itri][0],					     wf[iwf].y[itri][0],					     wf[iwf].z[itri][0]);			          glVertex3f(wf[iwf].x[itri][1],					     wf[iwf].y[itri][1],					     wf[iwf].z[itri][1]);			          glVertex3f(wf[iwf].x[itri][2],					     wf[iwf].y[itri][2],					     wf[iwf].z[itri][2]);		        } else {                            fprintf(stderr,"warning: some triangles ignored\n");                            glEnd();                            break;                        }                        		        glEnd();	          }            }            glEndList();            /*solid wavefronts*/  	    glNewList(nhz*4+7,GL_COMPILE);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission);	    for (iwf=0;iwf<nwf;iwf++) {	          for (itri=0;itri<ntris[iwf];itri++) {		        glBegin(GL_TRIANGLE_STRIP);		        if (fabs(wf[iwf].x[itri][0])<RADIUS &&		            fabs(wf[iwf].y[itri][0])<RADIUS &&		            fabs(wf[iwf].z[itri][0])<RADIUS && 		            fabs(wf[iwf].x[itri][1])<RADIUS &&		            fabs(wf[iwf].y[itri][1])<RADIUS &&		            fabs(wf[iwf].z[itri][1])<RADIUS &&                            fabs(wf[iwf].x[itri][2])<RADIUS &&                            fabs(wf[iwf].y[itri][2])<RADIUS &&                            fabs(wf[iwf].z[itri][2])<RADIUS) {			          glVertex3f(wf[iwf].x[itri][0],					     wf[iwf].y[itri][0],					     wf[iwf].z[itri][0]);			          glVertex3f(wf[iwf].x[itri][1],					     wf[iwf].y[itri][1],					     wf[iwf].z[itri][1]);			          glVertex3f(wf[iwf].x[itri][2],					     wf[iwf].y[itri][2],					     wf[iwf].z[itri][2]);		        } else {                            fprintf(stderr,"warning: some triangles ignored\n");                            glEnd();                            break;                        }                        		        glEnd();	          }            }            glEndList();      }      /*surface traveltimes*/      if (sttfp!=NULL) {            fscanf(sttfp,"%d = ntris\n",&ntr);            fprintf(stderr,"ntr=%d\n",ntr);            if (ntr>2000) sttfp=NULL;      }            if (sttfp!=NULL && ntr>0) {            stt=ealloc3float(3,3,ntr);            ttt=ealloc2float(3,ntr);            tmax=0.0;            tmin=1.0e+10;	    for (itri=0;itri<ntr;itri++) {	          fscanf(sttfp,"%f %f %f %f %f %f %f %f %f %f %f %f\n",		       &stt[itri][0][0],		       &stt[itri][0][1],		       &stt[itri][0][2],		       &ttt[itri][0],		       &stt[itri][1][0],		       &stt[itri][1][1],		       &stt[itri][1][2],		       &ttt[itri][1],		       &stt[itri][2][0],		       &stt[itri][2][1],		       &stt[itri][2][2],		       &ttt[itri][2]);                  tmax=MAX(tmax,ttt[itri][0]);		  tmax=MAX(tmax,ttt[itri][1]);		  tmax=MAX(tmax,ttt[itri][2]);                  tmin=MIN(tmin,ttt[itri][0]);		  tmin=MIN(tmin,ttt[itri][1]);		  tmin=MIN(tmin,ttt[itri][2]);		  stt[itri][0][0]=((stt[itri][0][0]-xmin)/		       (xmax-xmin)-0.5)*DIAMETER;		  stt[itri][0][1]=-((stt[itri][0][1]-ymin)/		       (ymax-ymin)-0.5)*DIAMETER;		  stt[itri][0][2]=((stt[itri][0][2]-zmin)/		       (zmax-zmin)-0.5)*DIAMETER;		  stt[itri][1][0]=((stt[itri][1][0]-xmin)/		       (xmax-xmin)-0.5)*DIAMETER;		  stt[itri][1][1]=-((stt[itri][1][1]-ymin)/		       (ymax-ymin)-0.5)*DIAMETER;		  stt[itri][1][2]=((stt[itri][1][2]-zmin)/		       (zmax-zmin)-0.5)*DIAMETER;		  stt[itri][2][0]=((stt[itri][2][0]-xmin)/		       (xmax-xmin)-0.5)*DIAMETER;		  stt[itri][2][1]=-((stt[itri][2][1]-ymin)/		       (ymax-ymin)-0.5)*DIAMETER;		  stt[itri][2][2]=((stt[itri][2][2]-zmin)/		       (zmax-zmin)-0.5)*DIAMETER;            }      }      tmax=MAX(tmax,tmin+0.01);      glNewList(nhz*4+5,GL_COMPILE);      for (itri=0;itri<ntr;itri++) {	    glBegin(GL_TRIANGLE_STRIP);            tEmission(ttt[itri][0],tmin,tmax,emission);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission);	    glVertex3fv(stt[itri][0]);	    tEmission(ttt[itri][1],tmin,tmax,emission);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission);	    glVertex3fv(stt[itri][1]);	    tEmission(ttt[itri][2],tmin,tmax,emission);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emission);	    glVertex3fv(stt[itri][2]);	    glEnd();      }      glEndList();      glutMainLoop();      return 0;}/*********************************************************************Author: Zhaobo Meng, CWP 1996*********************************************************************/voidshowHorz(      int ihz,float ***data,      int nx,int ny,float ***emis){      int ix,iy;      int nxhalf;      nxhalf=nx/2;      glNewList(ihz+nhz+3,GL_COMPILE);      glBegin(GL_QUAD_STRIP);      for (ix=0;ix<nx-1;ix++) {      	    for (iy=0;iy<ny;iy++) {		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix]);		  glVertex3fv(data[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix+1]);		  glVertex3fv(data[iy][ix+1]);	    }	    for (iy=ny-1;iy>=0;iy--) {	       	  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix+1]);		  glVertex3fv(data[iy][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix]);		  glVertex3fv(data[iy][ix]);	    }      }      glEnd();      glEndList();}voidshowLayer(int ihz,float ***databot,float ***datatop,      int nx,int ny,float ***emisbot,float ***emistop) {      int ix,iy;      glNewList(ihz+3,GL_COMPILE);      glBegin(GL_QUAD_STRIP);      for (ix=0;ix<nx-1;ix++) {	    for (iy=0;iy<ny;iy++) {		  if (databot[iy][ix][2]<EPS+datatop[iy][ix][2] &&		      databot[iy][ix+1][2]<EPS+datatop[iy][ix+1][2]) continue; 		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix]);		  glVertex3fv(databot[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix+1]);		  glVertex3fv(databot[iy][ix+1]);	    }	    for (iy=ny-1;iy>=0;iy--) {		  if (databot[iy][ix][2]<EPS+datatop[iy][ix][2] &&		      databot[iy][ix+1][2]<EPS+datatop[iy][ix+1][2]) continue; 		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix]);		  glVertex3fv(datatop[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix+1]);		  glVertex3fv(datatop[iy][ix+1]);	    }      }      for (iy=0;iy<ny;iy++) {	    if (databot[iy][nx-1][2]<EPS+datatop[iy][nx-1][2]) continue;	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][nx-1]);	    glVertex3fv(databot[iy][nx-1]);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][nx-1]);	    glVertex3fv(datatop[iy][nx-1]);      }      for (ix=nx-1;ix>=0;ix--) {	    if (databot[ny-2][ix][2]<EPS+datatop[ny-2][ix][2]) continue;	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[ny-1][ix]);	    glVertex3fv(databot[ny-1][ix]);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[ny-1][ix]);	    glVertex3fv(datatop[ny-1][ix]);      }      for (iy=ny-1;iy>=0;iy--) {	    if (databot[iy][0][2]<EPS+datatop[iy][0][2]) continue;	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][0]);	    glVertex3fv(databot[iy][0]);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][0]);	    glVertex3fv(datatop[iy][0]);      }      for (ix=0;ix<nx;ix++) {	    if (databot[0][ix][2]<EPS+datatop[0][ix][2]) continue;	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[0][ix]);	    glVertex3fv(databot[0][ix]);	    glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[0][ix]);	    glVertex3fv(datatop[0][ix]);      }      glEnd();      glEndList();}void    /*notice: I changed the order of 0 and 1 here to make it upside down*/showTetra(int ihz,float ***datatop,float ***databot,      int nx,int ny,float ***emistop,float ***emisbot) {      int ix,iy;      glNewList(ihz+3+nhz*2,GL_COMPILE);      glBegin(GL_LINES);      /**********************************************************      Plot 2 grids like this         (ix,iy+2)_____(ix+1,iy+2)                 |    /|                 |   / |	         |  /  |                 | /   |                 |/    | 	(ix,iy+1)|-----|(ix+1,iy+1)		 |\    |		 | \   |		 |  \  |		 |   \ |	  (ix,iy)|____\|(ix+1,iy)      **********************************************************/      for (ix=0;ix<nx-1;ix++) {   /*horizontal edges*/	    for (iy=0;iy<ny;iy++) {		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix]);		  glVertex3fv(databot[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix+1]);		  glVertex3fv(databot[iy][ix+1]);            }      }      for (ix=0;ix<nx;ix++) {   /*vertical edges*/	    for (iy=0;iy<ny-1;iy++) {	          glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix]);		  glVertex3fv(databot[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix]);		  glVertex3fv(databot[iy+1][ix]);            }      }      for (ix=0;ix<nx-1;ix++) {   /*slant edges*/	    for (iy=0;iy<ny-1;iy+=2) {	          glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix]);		  glVertex3fv(databot[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix+1]);		  glVertex3fv(databot[iy][ix+1]);	    }        	    for (iy=1;iy<ny-1;iy+=2) {		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix]);		  glVertex3fv(databot[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix]);		  glVertex3fv(databot[iy+1][ix+1]);	    }      }      /*the base horizon*/      for (ix=0;ix<nx-1;ix++) {   /*horizontal edges*/	    for (iy=0;iy<ny;iy++) {		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix]);		  glVertex3fv(datatop[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix+1]);		  glVertex3fv(datatop[iy][ix+1]);            }      }      for (ix=0;ix<nx;ix++) {   /*vertical edges*/	    for (iy=0;iy<ny-1;iy++) {	          glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix]);		  glVertex3fv(datatop[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix]);		  glVertex3fv(datatop[iy+1][ix]);            }      }      for (ix=0;ix<nx-1;ix++) {   /*slant edges*/	    for (iy=0;iy<ny-1;iy+=2) {	          glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix]);		  glVertex3fv(datatop[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix+1]);		  glVertex3fv(datatop[iy][ix+1]);	    }        

⌨️ 快捷键说明

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