📄 table.c
字号:
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 + -