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

📄 viewer3.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 3 页
字号:
	    for (iy=1;iy<ny-1;iy+=2) {		  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+1]);		  glVertex3fv(datatop[iy+1][ix+1]);	    }      }      /**********************************************************      Plot vertical segments      **********************************************************/      for (ix=0;ix<nx;ix++) {	    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,emistop[iy][ix]);		  glVertex3fv(datatop[iy][ix]);            }      }      /**********************************************************      Plot slant segments      **********************************************************/      for (ix=0;ix<nx-1;ix++) {	    for (iy=0;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,emistop[iy][ix+1]);		  glVertex3fv(datatop[iy][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix]);		  glVertex3fv(databot[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix]);		  glVertex3fv(datatop[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix]);		  glVertex3fv(databot[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix+1]);		  glVertex3fv(datatop[iy][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix+1]);		  glVertex3fv(databot[iy+1][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix]);		  glVertex3fv(datatop[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix+1]);		  glVertex3fv(databot[iy+1][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy][ix+1]);		  glVertex3fv(datatop[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,emistop[iy+1][ix]);		  glVertex3fv(datatop[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix]);		  glVertex3fv(databot[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix+1]);		  glVertex3fv(datatop[iy+1][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy+1][ix]);		  glVertex3fv(databot[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix+1]);		  glVertex3fv(datatop[iy+1][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix]);		  glVertex3fv(databot[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix+1]);		  glVertex3fv(datatop[iy+1][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emisbot[iy][ix+1]);		  glVertex3fv(databot[iy][ix+1]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emistop[iy+1][ix+1]);		  glVertex3fv(datatop[iy+1][ix+1]);	    }      }      glEnd();      glEndList();}voidshowTri(int ihz,float ***data,      int nx,int ny,float ***emis) {      int ix,iy;      glNewList(ihz+3+nhz*3,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,emis[iy][ix]);		  glVertex3fv(data[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix+1]);		  glVertex3fv(data[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,emis[iy][ix]);		  glVertex3fv(data[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy+1][ix]);		  glVertex3fv(data[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,emis[iy][ix]);		  glVertex3fv(data[iy+1][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix+1]);		  glVertex3fv(data[iy][ix+1]);	    }        	    for (iy=1;iy<ny-1;iy+=2) {		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy][ix]);		  glVertex3fv(data[iy][ix]);		  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,emis[iy+1][ix+1]);		  glVertex3fv(data[iy+1][ix+1]);	    }      }      glEnd();      glEndList();}voidrecalcModelView(void){      GLfloat m[4][4];		/*the matrix*/      glPopMatrix();      glPushMatrix();      build_rotmatrix(m, curquat);      glMultMatrixf(&m[0][0]);      glScalef(glb_scalefactor, glb_scalefactor, glb_scalefactor);      glb_newmodel=0;}/***************************************************************function to print a message in the window***************************************************************/voidshowMessage(GLfloat x, GLfloat y, GLfloat z, char *message){      glPushMatrix();      glDisable(GL_LIGHTING);      glTranslatef(x, y, z);      glScalef(.01, .01, .01);      /* To rotate 90 degrees counterclockwise aroubd (0,0,1)*/      glRotatef(90.0, 0.0, 0.0, 1.0);      while (*message) {       	    glutStrokeCharacter(GLUT_STROKE_ROMAN, *message);	    message++;      }      glEnable(GL_LIGHTING);      glPopMatrix();}/***************************************************Called whenever glutPostRedisplay() is called***************************************************/voidredraw(void){      int ihz;      if (glb_newmodel) recalcModelView();      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      for (ihz=0;ihz<nhz;ihz++) {	    if (hlt==LAYER && glb_on_or_off[ihz]==ON)		  glCallList(ihz+3);	    else if (hlt==HORZ && glb_on_or_off[ihz]==ON)		  glCallList(nhz+ihz+3);	    else if (hlt==TETRA && glb_on_or_off[ihz]==ON)		  glCallList(ihz+2*nhz+3);	    else if (hlt==TRI && glb_on_or_off[ihz]==ON)		  glCallList(ihz+3*nhz+3);      }      if (glb_plot_rays==PLOT_RAYS) {	    if (wc_rays==WHITE)	          glCallList(nhz*4+3);	    else	          glCallList(nhz*4+4);      }      if (plot_st==PLOT_SURFACE_TRAVELTIMES)            glCallList(nhz*4+5);      if (glb_plot_wf==PLOT_WF) {	    if (wfs==WIRED)                  glCallList(nhz*4+6);	    else	          glCallList(nhz*4+7);      }      glFlush();      /*showMessage(0, 0, 0, "x direction");*/      glutSwapBuffers();}/****************************************This call back is called when the windowis rescaled****************************************/voidmyReshape(int w, int h){      glViewport(0, 0, w, h);      glb_W=w;      glb_H=h;}/*****************************************This call back is called when the mouse ispressed*****************************************/voidmouse(int button, int state, int x, int y){      if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) {	    glb_spinning=0;	    glutIdleFunc(NULL);	    glb_moving=1;	    glb_beginx=x;	    glb_beginy=y;	    if(glutGetModifiers() & GLUT_ACTIVE_SHIFT) 		  glb_scaling=1;	    else 		  glb_scaling=0;      }	      if (button==GLUT_LEFT_BUTTON && state==GLUT_UP) {	    glb_moving=0;	    glb_spinning=0;      }}/********************************************Animate the object to continue its motion********************************************/voidanimate(void){      add_quats(lastquat, curquat, curquat);      glb_newmodel=1;      glutPostRedisplay();}/*********************************************Called when the mouse is pressed while moved*********************************************/voidmotion(int x,int y){      if (glb_scaling) {	    glb_scalefactor=glb_scalefactor*		  (1.0+(((float)(glb_beginy-y))/glb_H));	    glb_beginx=x;	    glb_beginy=y;	    glb_newmodel=1;	    glutPostRedisplay();	    return;      }      if (glb_moving) {	    trackball(lastquat,		  (2.0*glb_beginx-glb_W)/glb_W,		  (glb_H-2.0*glb_beginy)/glb_H,		  (2.0*x-glb_W)/glb_W,		  (glb_H-2.0*y)/glb_H,tbs);	    #ifdef DEBUG	    fprintf(stderr,"q=%f,%f,%f,%f\n",curquat[0],curquat[1],		  curquat[2],curquat[3]);            #endif	    glb_beginx=x;	    glb_beginy=y;	    glb_spinning=1;	    glutIdleFunc(animate);      }}/******************************************switches******************************************/voidcontrolLights(int value){      switch (value) {	    case -1:		  exit(0);		  break;	    case 0:		  glutFullScreen();		  break;            case 1:                  if (wc_rays==WHITE)                        wc_rays=COLORED;                  else                        wc_rays=WHITE;                  break;            case 2:		  if (glb_plot_rays==DO_NOT_PLOT_RAYS)		       	glb_plot_rays=PLOT_RAYS;		  else			glb_plot_rays=DO_NOT_PLOT_RAYS;                  break;            case 3:                  if (plot_st==DO_NOT_PLOT_SURFACE_TRAVELTIMES)		        plot_st=PLOT_SURFACE_TRAVELTIMES;                  else 		        plot_st=DO_NOT_PLOT_SURFACE_TRAVELTIMES;		  break;            case 4:                  if (wfs==WIRED)                        wfs=SOLID;                  else	      	        wfs=WIRED;                                    break;            case 5:                  if (glb_plot_wf==DO_NOT_PLOT_WF)                        glb_plot_wf=PLOT_WF;                  else                        glb_plot_wf=DO_NOT_PLOT_WF;                  break;            case 6:		  if (hlt==HORZ)		        hlt=TRI;		  else if (hlt==TRI)			hlt=TETRA;		  else if (hlt==TETRA)			hlt=LAYER;		  else 			hlt=HORZ;			  break;	    default:		  if (glb_on_or_off[value-7]==ON)			glb_on_or_off[value-7]=OFF;		  else 		        glb_on_or_off[value-7]=ON;	          break;	      }      glutPostRedisplay();}/************************************************When it is not visible, do not waste the computerresources************************************************/voidvis(int visible){      if (visible==GLUT_VISIBLE) {	    if (glb_spinning)		  glutIdleFunc(animate);      } else {	    if (glb_spinning)	       	  glutIdleFunc(NULL);      }}/*********************************************************************Author: Zhaobo Meng, CWP 1996Set up the traveltime mapping: traveltime->color************************************************/voidvEmission(float v,float vmin,float vmax,      float *emission){      float color;      color=(v-vmin)/(vmax-vmin);      color=MAX(0.0,MIN(1.0,color));      if (glb_hue==1) {	    emission[0]=1.0;	    emission[1]=color;	    emission[2]=1.0;      } else {	    emission[0]=color;	    emission[1]=color;	    emission[2]=color;      }      emission[3]=glb_alpha;}/*********************************************************************Author: Zhaobo Meng, CWP 1996Set up the traveltime mapping: traveltime->color*********************************************************************/voidtEmission(float t,float tmin,float tmax,      float *emission){      if (fabs(tmax-tmin)==0.0)            emission[1]=0.0;      else              emission[1]=MAX(0.0,MIN(1.0,(t-tmin)/(tmax-tmin)));      emission[0]=1.0;      emission[2]=emission[1];      emission[3]=glb_alpha;}static void normalize_quat(float q[4]){      int i;      float mag;      mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);      for (i = 0; i < 4; i++) q[i] /= mag;}

⌨️ 快捷键说明

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