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

📄 table.c

📁 这是一个相当棒的Linux下的台球游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
       bumpcloth = bump_setup_vp_rc("cloth-col.png",0.02,0);       bump_cloth_init = 1;   }*/   if( table_obj != -1 ) glDeleteLists( table_obj, 1 );   table_obj = glGenLists(1);   glNewList(table_obj, GL_COMPILE);//   glScalef( 1.0, 1.0, 1.0 );   glMaterialfv(GL_FRONT, GL_DIFFUSE,   tab_col_diff);   glMaterialfv(GL_FRONT, GL_AMBIENT,   tab_col_amb);   glMaterialfv(GL_FRONT, GL_SPECULAR,  tab_col_spec);   glMaterialf (GL_FRONT, GL_SHININESS, 0.0 );   //glTranslatef( 0, 0, 0 );   //gluQuadricDrawStyle(q, GLU_LINE);   /* cylinder *///   gluQuadricNormals(q, GL_SMOOTH);//   gluQuadricTexture(q, GL_TRUE);   //gluCylinder(q, 0.5, 0.5, 2.0, 24, 1);      //glTranslatef(1.0, 0.0, 0.5);   //gluCylinder(q, 0.0, 0.4, 1.0, 24, 1);   //glTranslatef(-1.0, 0.0, -0.5);   /*glTranslatef( 0, 0, balld/2.0 );   glRectd( -tablew/2.0, -tablel/2.0, tablew/2.0, tablel/2.0 );   glTranslatef( 0, 0, tableh );   glRectd( tablew/2.0, -tablel/2.0, -tablew/2.0, tablel/2.0 );   glTranslatef( 0, 0, -tableh-balld/2.0 );*/   if( options_table_tex ){       float vx[]={0,50,60,0};       float vy[]={50,0,60,0};       glEnable(GL_TEXTURE_2D);       glBindTexture(GL_TEXTURE_2D,tabletexbind);       glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);       if( options_cloth_tex && extension_multitexture ){           glActiveTextureARB(GL_TEXTURE1_ARB);           glEnable(GL_TEXTURE_2D);           glEnable(GL_TEXTURE_GEN_S);           glEnable(GL_TEXTURE_GEN_T);           glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);           glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);           glTexGenfv(GL_S, GL_OBJECT_PLANE, vx);           glTexGenfv(GL_T, GL_OBJECT_PLANE, vy);           glBindTexture(GL_TEXTURE_2D,clothtexbind);           glActiveTextureARB(GL_TEXTURE0_ARB);       }   } else {       glDisable(GL_TEXTURE_2D);   }/*   {       GLfloat t_gen_params[] = {300.0,100.0,0.0,0.0};       GLfloat s_gen_params[] = {-100.0,300.0,0.0,0.0};       glEnable(GL_TEXTURE_GEN_S);       glEnable(GL_TEXTURE_GEN_T);       glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);       glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);       glTexGenfv(GL_S, GL_OBJECT_PLANE, s_gen_params);       glTexGenfv(GL_T, GL_OBJECT_PLANE, t_gen_params);       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);   }*/   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);/*   if(options_bumpwood       &&      extension_multitexture &&      extension_rc_NV        &&      extension_vp_NV        &&      bump_cloth_init ){       DPRINTF("applying wood frame bumpmaps\n");       bump_set_light(&bumpcloth,0.0,0.0,0.7);       bump_set_diff(&bumpcloth,tab_col_diff[0]+tab_col_amb[0],tab_col_diff[1]+tab_col_amb[1],tab_col_diff[2]+tab_col_amb[2]);       bump_set_spec(&bumpcloth,0.5,0.5,0.5);       bump_use(&bumpcloth);       glActiveTextureARB(GL_TEXTURE1_ARB);       GLfloat t_gen_params[] = {1.0,0.0,0.0,0.0};       GLfloat s_gen_params[] = {0.0,1.0,0.0,0.0};       glDisable(GL_TEXTURE_GEN_S);       glDisable(GL_TEXTURE_GEN_T);       glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);       glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);       glTexGenfv(GL_S, GL_OBJECT_PLANE, s_gen_params);       glTexGenfv(GL_T, GL_OBJECT_PLANE, t_gen_params);       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);       glActiveTextureARB(GL_TEXTURE0_ARB);   }*///   glShadeModel(GL_FLAT);/*   glBegin(GL_QUADS);      glTexCoord2f( -0.7-0.2, -0.2 );      glNormal3f( 0.0, 0.0, 1.0 );      glVertex3f(-tablew/2.0, -tablel/2.0, -balld/2.0);      glTexCoord2f( 1.7-0.2, -0.2 );      glNormal3f( 0.0, 0.0, 1.0 );      glVertex3f(-tablew/2.0, +tablel/2.0, -balld/2.0);      glTexCoord2f( 1.7+0.2, 1.2 );      glNormal3f( 0.0, 0.0, 1.0 );      glVertex3f(+tablew/2.0, +tablel/2.0, -balld/2.0);      glTexCoord2f( -0.7+0.2, 1.2 );      glNormal3f( 0.0, 0.0, 1.0 );      glVertex3f(+tablew/2.0, -tablel/2.0, -balld/2.0);   glEnd();*/   if(carambol){       tablew=TABLE_W+2.0*BANDE_D;       tablel=TABLE_L+2.0*BANDE_D;       area_w = TABLE_W+2.0*BANDE_D;       area_l = TABLE_L+2.0*BANDE_D;   } else {       area_w = TABLE_W-0.07;       area_l = TABLE_L-0.07;   }/*#define TABLEBUMPCOORD_X(x,y) (x*3.0)#define TABLEBUMPCOORD_Y(x,y) (y*3.0)*//* AREA_SUBDIV_Y and AREA_SUBDIV_X have to be even */#define AREA_SUBDIV_Y 6#define AREA_SUBDIV_X 4   jmax=AREA_SUBDIV_Y; imax=AREA_SUBDIV_X;   for(j=0;j<jmax;j++){       for(i=0;i<imax;i++){           double x,y;           glBegin(GL_QUADS);           //           glTexCoord2f( -0.7+j*2.4/jmax-0.2+i*0.4/imax, -0.2+i*1.4/imax );           x=-area_w/2.0+i*area_w/imax; y=-area_l/2.0+j*area_l/jmax;           glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );           glNormal3f( 0.0, 0.0, 1.0 );           glVertex3f( x,y, -balld/2.0);           //           glTexCoord2f( -0.7+(j+1)*2.4/jmax-0.2+i*0.4/imax, -0.2+i*1.4/imax );           x=-area_w/2.0+i*area_w/imax; y=-area_l/2.0+(j+1)*area_l/jmax;           glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );           glNormal3f( 0.0, 0.0, 1.0 );           glVertex3f( x,y, -balld/2.0);           //           glTexCoord2f( -0.7+(j+1)*2.4/jmax-0.2+(i+1)*0.4/imax, -0.2+(i+1)*1.4/imax );           x=-area_w/2.0+(i+1)*area_w/imax; y=-area_l/2.0+(j+1)*area_l/jmax;           glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );           glNormal3f( 0.0, 0.0, 1.0 );           glVertex3f( x,y, -balld/2.0);           //           glTexCoord2f( -0.7+j*2.4/jmax-0.2+(i+1)*0.4/imax, -0.2+(i+1)*1.4/imax );           x=-area_w/2.0+(i+1)*area_w/imax; y=-area_l/2.0+j*area_l/jmax;           glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );           glNormal3f( 0.0, 0.0, 1.0 );           glVertex3f( x,y, -balld/2.0);           glEnd();       }   }   if(carambol){       tablew=TABLE_W;       tablel=TABLE_L;   }   if(!carambol){       /* holes */       glFrontFace(GL_CW);       my_HoleTuch(1.0,1.0);       glFrontFace(GL_CCW);       my_HoleTuch(1.0,-1.0);       glFrontFace(GL_CCW);       my_HoleTuch(-1.0,1.0);       glFrontFace(GL_CW);       my_HoleTuch(-1.0,-1.0);   }/*   if(options_bumpwood       &&      extension_multitexture &&      extension_rc_NV        &&      extension_vp_NV        &&      bump_cloth_init ){       DPRINTF("applying wood frame bumpmaps\n");       bump_restore();       glActiveTextureARB(GL_TEXTURE1_ARB);       glDisable(GL_TEXTURE_GEN_S);       glDisable(GL_TEXTURE_GEN_T);       glActiveTextureARB(GL_TEXTURE0_ARB);   }*/   /* furchen */   if(!carambol){       double x,y;#define TABLEVERTEX(x,y,z,f1,f2) \             glNormal3f(0.0,0.0,1.0); \             glTexCoord2f( TABLETEXCOORD_X((x)*(f1),(y)*(f2)), TABLETEXCOORD_Y((x)*(f1),(y)*(f2)) ); \             glVertex3f((x)*(f1),(y)*(f2),z);//             glFrontFace((f1*f2>0.0)?GL_CW:GL_CCW);   /*lower, upper*/       for(i=0;i<2;i++){           glFrontFace(i==0?GL_CW:GL_CCW);           glBegin(GL_QUAD_STRIP);           TABLEVERTEX( area_w/2.0,                                -area_l/2.0,                        -BALL_D/2.0, 1.0, i==0?1.0:-1.0 );           TABLEVERTEX( TABLE_W/2.0-edge_xyoffs-BANDE_D*HOLE1_TAN, -TABLE_L/2.0-BANDE_D*BANDE_D2RATIO, -BALL_D/2.0, 1.0, i==0?1.0:-1.0 );           for(j=0;j<AREA_SUBDIV_X-1;j++){               TABLEVERTEX( area_w/2.0-area_w*(j+1)/AREA_SUBDIV_X, -area_l/2.0,                        -BALL_D/2.0, 1.0, i==0?1.0:-1.0 );               TABLEVERTEX( area_w/2.0-area_w*(j+1)/AREA_SUBDIV_X, -TABLE_L/2.0-BANDE_D*BANDE_D2RATIO, -BALL_D/2.0, 1.0, i==0?1.0:-1.0 );           }           TABLEVERTEX( area_w/2.0,                                -area_l/2.0,                        -BALL_D/2.0, -1.0, i==0?1.0:-1.0 );           TABLEVERTEX( TABLE_W/2.0-edge_xyoffs-BANDE_D*HOLE1_TAN, -TABLE_L/2.0-BANDE_D*BANDE_D2RATIO, -BALL_D/2.0, -1.0, i==0?1.0:-1.0 );           glEnd();       }       /* some middle pocket triangles */       for(i=0;i<2;i++){           glFrontFace(i==0?GL_CW:GL_CCW);           glBegin(GL_TRIANGLES);           TABLEVERTEX( -area_w/2.0,                                  0.0,                              -BALL_D/2.0, i==0?1.0:-1.0, 1.0 );           TABLEVERTEX( -TABLE_W/2.0-BANDE_D*BANDE_D2RATIO,          -HOLE2_R-HOLE2_TAN*BANDE_D,        -BALL_D/2.0, i==0?1.0:-1.0, 1.0 );           TABLEVERTEX( -TABLE_W/2.0-HOLE2_XYOFFS+HOLE2_R,            0.0,                              -BALL_D/2.0, i==0?1.0:-1.0, 1.0 );           TABLEVERTEX( -area_w/2.0,                                  0.0,                              -BALL_D/2.0, i==0?1.0:-1.0, 1.0 );           TABLEVERTEX( -TABLE_W/2.0-HOLE2_XYOFFS+HOLE2_R,            0.0,                              -BALL_D/2.0, i==0?1.0:-1.0, 1.0 );           TABLEVERTEX( -TABLE_W/2.0-BANDE_D*BANDE_D2RATIO,          +HOLE2_R+HOLE2_TAN*BANDE_D,        -BALL_D/2.0, i==0?1.0:-1.0, 1.0 );           glEnd();       }       /* lower left, lower right, upper right, upper left */       for(i=0;i<4;i++){           double fx=0.0;           double fy=0.0;           switch(i){           case 0: fx=+1.0; fy=+1.0; glFrontFace(GL_CW);  break;  /* lower left  */           case 1: fx=-1.0; fy=+1.0; glFrontFace(GL_CCW); break;  /* lower right */           case 2: fx=-1.0; fy=-1.0; glFrontFace(GL_CW);  break;  /* upper right */           case 3: fx=+1.0; fy=-1.0; glFrontFace(GL_CCW); break;  /* upper left  */           }           glBegin(GL_QUAD_STRIP);           /* furchen */           TABLEVERTEX( -TABLE_W/2.0-BANDE_D2RATIO*BANDE_D, -HOLE1_R-HOLE2_TAN*BANDE_D,                 -BALL_D/2.0, fx,fy );           TABLEVERTEX( -area_w/2.0,                        0.0,                                        -BALL_D/2.0, fx,fy );           for(j=0;j<AREA_SUBDIV_Y/2-1;j++){               TABLEVERTEX( -TABLE_W/2.0-BANDE_D2RATIO*BANDE_D, -area_l*(j+1)/AREA_SUBDIV_Y,                -BALL_D/2.0, fx,fy );               TABLEVERTEX( -area_w/2.0,                        -area_l*(j+1)/AREA_SUBDIV_Y,                -BALL_D/2.0, fx,fy );           }           TABLEVERTEX( -TABLE_W/2.0-BANDE_D2RATIO*BANDE_D, -TABLE_L/2.0+edge_xyoffs+HOLE1_TAN*BANDE_D, -BALL_D/2.0, fx,fy );           TABLEVERTEX( -area_w/2.0,                        -area_l/2.0,                                -BALL_D/2.0, fx,fy );           glEnd();           /* quad between area-edge and hole */           glBegin(GL_TRIANGLES);           TABLEVERTEX( -area_w/2.0,                            -area_l/2.0,                                -BALL_D/2.0, fx,fy );           TABLEVERTEX( -TABLE_W/2.0-HOLE1_XYOFFS+HOLE1_R/SQR2, -TABLE_L/2.0-HOLE1_XYOFFS+HOLE1_R/SQR2,     -BALL_D/2.0, fx,fy );           TABLEVERTEX( -TABLE_W/2.0-BANDE_D2RATIO*BANDE_D,     -TABLE_L/2.0+edge_xyoffs+HOLE1_TAN*BANDE_D, -BALL_D/2.0, fx,fy );           TABLEVERTEX( -area_w/2.0,                            -area_l/2.0,                                -BALL_D/2.0, fx,fy );           TABLEVERTEX( -TABLE_W/2.0+edge_xyoffs+HOLE1_TAN*BANDE_D, -TABLE_L/2.0-BANDE_D2RATIO*BANDE_D,     -BALL_D/2.0, fx,fy );           TABLEVERTEX( -TABLE_W/2.0-HOLE1_XYOFFS+HOLE1_R/SQR2, -TABLE_L/2.0-HOLE1_XYOFFS+HOLE1_R/SQR2,     -BALL_D/2.0, fx,fy );           glEnd();       }#define HOLE2_SEGNR_2 12//   if(  )       for(k=0;k<2;k++){  /* left, right hole */           if(k==0) glFrontFace(GL_CCW); else glFrontFace(GL_CW);           glBegin(GL_QUAD_STRIP);           for(i=0;i<HOLE2_SEGNR_2+1;i++){               double phi,x,y;               phi=(double)i*M_PI/HOLE2_SEGNR_2;               x=-TABLE_W/2.0-HOLE2_XYOFFS+HOLE2_R*sin(phi);               y=HOLE2_R*cos(phi);               if(k!=0) x=-x;               glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );               glNormal3f( 0.0, 0.0, 1.0 );               glVertex3f( x,y, -BALL_D/2.0 );               x=-TABLE_W/2.0-HOLE2_XYOFFS+(HOLE2_R-HOLE2_PHASE)*sin(phi);               y=(HOLE2_R-HOLE2_PHASE)*cos(phi);               if(k!=0) x=-x;               glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );               glNormal3f( -sin(phi), (k==0)?-cos(phi):cos(phi), 0.0 );               glVertex3f( x,y, -BALL_D/2.0-HOLE2_PHASE );           }           glEnd();       }       for(k=0;k<2;k++){  /* left, right hole fans */           for(j=0;j<2;j++){ /* fan 1, 2 */               if(j^k) glFrontFace(GL_CCW); else glFrontFace(GL_CW);               glBegin(GL_TRIANGLE_FAN);               glNormal3f( 0.0, 0.0, 1.0 );               x=-TABLE_W/2.0-BANDE_D*BANDE_D2RATIO; y=-HOLE2_R-BANDE_D*HOLE2_TAN;               if(j!=0) y=-y;               if(k!=0) x=-x;               glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );               glVertex3f( x, y, -BALL_D/2.0 );               for(i=0;i<HOLE2_SEGNR_2/2+1;i++){                   double phi,x,y;                   phi=(double)i*M_PI/HOLE2_SEGNR_2;                   x=-TABLE_W/2.0-HOLE2_XYOFFS+HOLE2_R*sin(phi);                   y=-HOLE2_R*cos(phi);                   if(j!=0) y=-y;                   if(k!=0) x=-x;                   glTexCoord2f( TABLETEXCOORD_X(x,y), TABLETEXCOORD_Y(x,y) );                   glNormal3f( 0.0, 0.0, 1.0 );                   glVertex3f( x,y, -BALL_D/2.0 );               }               glEnd();           }       }       glFrontFace(GL_CW);   } /* if(!carambol) *//*   my_glBox( -tablew/2.0, -tablel/2.0, -balld/2.0,              tablew/2.0,  tablel/2.0, -balld/2.0-6.0*cm );*///   hole_r1 = HOLE1_W/

⌨️ 快捷键说明

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