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

📄 table.c

📁 这是一个相当棒的Linux下的台球游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
            glNormal3f(n5.x,n5.y,n5.z);            glVertex3f(v5.x,v5.y,v5.z);//            glTexCoord2f(v1.x*FACT,v1.y*FACT);            glTexCoord2f(1.0-phi1/M_PI*2.0, 0.0*0.5);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);//            glTexCoord2f(v6.x*FACT,v6.y*FACT);            glTexCoord2f(1.0-phi2/M_PI*2.0, 0.9*0.5);            glNormal3f(n6.x,n6.y,n6.z);            glVertex3f(v6.x,v6.y,v6.z);//            glTexCoord2f(v2.x*FACT,v2.y*FACT);            glTexCoord2f(1.0-phi1/M_PI*2.0, 0.9*0.5);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);//            glTexCoord2f(v7.x*FACT,v7.y*FACT);            glTexCoord2f(1.0-phi2/M_PI*2.0, 1.0*0.5);            glNormal3f(n7.x,n7.y,n7.z);            glVertex3f(v7.x,v7.y,v7.z);//            glTexCoord2f(v3.x*FACT,v3.y*FACT);            glTexCoord2f(1.0-phi1/M_PI*2.0, 1.0*0.5);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);//            glTexCoord2f(v8.x*FACT,v8.y*FACT);            glTexCoord2f(1.0-phi2/M_PI*2.0, 2.0*0.5);            glNormal3f(n8.x,n8.y,n8.z);            glVertex3f(v8.x,v8.y,v8.z);//            glTexCoord2f(v4.x*FACT,v4.y*FACT);            glTexCoord2f(1.0-phi1/M_PI*2.0, 2.0*0.5);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);//            glTexCoord2f(v8.x*FACT,v8.y*FACT);            glTexCoord2f(1.0-phi2/M_PI*2.0, 2.0*0.5);            glNormal3f(n8.x,n8.y,n8.z);            glVertex3f(v8_2.x,v8_2.y,v8_2.z);//            glTexCoord2f(v4.x*FACT,v4.y*FACT);            glTexCoord2f(1.0-phi1/M_PI*2.0, 2.0*0.5);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_2.x,v4_2.y,v4_2.z);//            glTexCoord2f(v8.x*FACT,v8.y*FACT);            glTexCoord2f(1.0-phi2/M_PI*2.0, 3.0*0.5);            glNormal3f(n8.x,n8.y,n8.z);            glVertex3f(v8_3.x,v8_3.y,v8_3.z);//            glTexCoord2f(v4.x*FACT,v4.y*FACT);            glTexCoord2f(1.0-phi1/M_PI*2.0, 3.0*0.5);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_3.x,v4_3.y,v4_3.z);            glEnd();        }/*        glBegin(GL_LINES);            glVertex3f(v1.x,v1.y,v1.z); v1=vec_add(v1,vec_scale(n1,0.1)); glVertex3f(v1.x,v1.y,v1.z);            glVertex3f(v2.x,v2.y,v2.z); v2=vec_add(v2,vec_scale(n2,0.1)); glVertex3f(v2.x,v2.y,v2.z);            glVertex3f(v3.x,v3.y,v3.z); v3=vec_add(v3,vec_scale(n3,0.1)); glVertex3f(v3.x,v3.y,v3.z);            glVertex3f(v4.x,v4.y,v4.z); v4=vec_add(v4,vec_scale(n4,0.1)); glVertex3f(v4.x,v4.y,v4.z);        glEnd();*/    }}double scalefunc( double phi ){    return(0.005*(0.2+0.8*sin(2.0*phi)));}void my_EdgeBumper( int segnr, double  (*r1)(double), double (*sc)(double), int order )/* edge shows to positive x,y direction*/{    int i;    double phi1,phi2,dphi1,dphi2;    VMvect n10,n20,n30,n40,v10,v20,v30,v40,n1,n2,n3,n4,n5,n6,n7,n8,v1,v2,v3,v4,v5,v6,v7,v8;    n10 = vec_unit(vec_xyz(-1,0,-1));    n20 = vec_unit(vec_xyz(-1,0,0));    n30 = vec_unit(vec_xyz(0,0,1));    n40 = vec_unit(vec_xyz(1,0,3));    v10 = vec_xyz(0,0,-1);    v20 = vec_xyz(-1,0,0);    v30 = vec_xyz(0,0,1);    v40 = vec_xyz(3,0,0);    for(i=0;i<segnr;i++){        phi1 = M_PI/2.0*(double)i/(double)segnr;        phi2 = M_PI/2.0*(double)(i+1)/(double)segnr;        dphi1 = atan((r1(phi1-0.01)-r1(phi1+0.01))/r1(phi1)/0.02);        dphi2 = atan((r1(phi2-0.01)-r1(phi2+0.01))/r1(phi2)/0.02);        n1 = vec_rotate(n10,vec_xyz(0,0,phi1+dphi1));        n2 = vec_rotate(n20,vec_xyz(0,0,phi1+dphi1));        n3 = vec_rotate(n30,vec_xyz(0,0,phi1+dphi1));        n4 = vec_rotate(n40,vec_xyz(0,0,phi1+dphi1));        n5 = vec_rotate(n10,vec_xyz(0,0,phi2+dphi2));        n6 = vec_rotate(n20,vec_xyz(0,0,phi2+dphi2));        n7 = vec_rotate(n30,vec_xyz(0,0,phi2+dphi2));        n8 = vec_rotate(n40,vec_xyz(0,0,phi2+dphi2));        v1 = vec_xyz(r1(phi1)*cos(phi1),r1(phi1)*sin(phi1),FRAME_DH);        v2 = vec_xyz(r1(phi1)*cos(phi1),r1(phi1)*sin(phi1),FRAME_DH);        v3 = vec_xyz(r1(phi1)*cos(phi1),r1(phi1)*sin(phi1),FRAME_DH);        v4 = vec_xyz(r1(phi1)*cos(phi1),r1(phi1)*sin(phi1),FRAME_DH);        v5 = vec_xyz(r1(phi2)*cos(phi2),r1(phi2)*sin(phi2),FRAME_DH);        v6 = vec_xyz(r1(phi2)*cos(phi2),r1(phi2)*sin(phi2),FRAME_DH);        v7 = vec_xyz(r1(phi2)*cos(phi2),r1(phi2)*sin(phi2),FRAME_DH);        v8 = vec_xyz(r1(phi2)*cos(phi2),r1(phi2)*sin(phi2),FRAME_DH);        v1 = vec_add(v1,vec_scale(vec_rotate(v10,vec_xyz(0,0,phi1)),sc(phi1)));        v2 = vec_add(v2,vec_scale(vec_rotate(v20,vec_xyz(0,0,phi1)),sc(phi1)));        v3 = vec_add(v3,vec_scale(vec_rotate(v30,vec_xyz(0,0,phi1)),sc(phi1)));        v4 = vec_add(v4,vec_scale(vec_rotate(v40,vec_xyz(0,0,phi1)),sc(phi1)));        v5 = vec_add(v5,vec_scale(vec_rotate(v10,vec_xyz(0,0,phi2)),sc(phi2)));        v6 = vec_add(v6,vec_scale(vec_rotate(v20,vec_xyz(0,0,phi2)),sc(phi2)));        v7 = vec_add(v7,vec_scale(vec_rotate(v30,vec_xyz(0,0,phi2)),sc(phi2)));        v8 = vec_add(v8,vec_scale(vec_rotate(v40,vec_xyz(0,0,phi2)),sc(phi2)));        if(!order){            glBegin(GL_QUAD_STRIP);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);            glNormal3f(n5.x,n5.y,n5.z);            glVertex3f(v5.x,v5.y,v5.z);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);            glNormal3f(n6.x,n6.y,n6.z);            glVertex3f(v6.x,v6.y,v6.z);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);            glNormal3f(n7.x,n7.y,n7.z);            glVertex3f(v7.x,v7.y,v7.z);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);            glNormal3f(n8.x,n8.y,n8.z);            glVertex3f(v8.x,v8.y,v8.z);            glEnd();        } else {            glBegin(GL_QUAD_STRIP);            glNormal3f(n5.x,n5.y,n5.z);            glVertex3f(v5.x,v5.y,v5.z);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);            glNormal3f(n6.x,n6.y,n6.z);            glVertex3f(v6.x,v6.y,v6.z);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);            glNormal3f(n7.x,n7.y,n7.z);            glVertex3f(v7.x,v7.y,v7.z);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);            glNormal3f(n8.x,n8.y,n8.z);            glVertex3f(v8.x,v8.y,v8.z);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);            glEnd();        }/*        glBegin(GL_LINES);            glVertex3f(v1.x,v1.y,v1.z); v1=vec_add(v1,vec_scale(n1,0.01)); glVertex3f(v1.x,v1.y,v1.z);            glVertex3f(v2.x,v2.y,v2.z); v2=vec_add(v2,vec_scale(n2,0.01)); glVertex3f(v2.x,v2.y,v2.z);            glVertex3f(v3.x,v3.y,v3.z); v3=vec_add(v3,vec_scale(n3,0.01)); glVertex3f(v3.x,v3.y,v3.z);            glVertex3f(v4.x,v4.y,v4.z); v4=vec_add(v4,vec_scale(n4,0.01)); glVertex3f(v4.x,v4.y,v4.z);        glEnd();*/    }}double r1coverfunc_zero( double y ){    return( 0.0 );}double r1coverfunc( double y ){//    return( (1.0-y*y)*0.04 );    if( y<=-1.0 || y>=1.0 ){        return 0.0;//        return HOLE2_XYOFFS-BANDE_D;    } else {        return( HOLE2_XYOFFS-BANDE_D+sqrt(1.0-y*y)*HOLE2_R );    }}#define nonconst_step 1void my_Cover( int segnr, double (*r1)(double), double l, int order, double endtan, double tex_x, double tex_y )/* edge shows to pos x,y direction*/{    int i;    double y1,y2;    double tan1, tan2;    VMvect n1,n2,n3,n4,v1,v2,v3,v4,v5,v6,v7,v8, v4_2,v4_3, v8_2,v8_3;    double r2;    r2 = FRAME_D-BANDE_D;    n1 = vec_unit(vec_xyz(0,0,1));    n2 = vec_unit(vec_xyz(FRAME_DH/(FRAME_D-BANDE_D-FRAME_PHASE),0,1));    n3 = vec_unit(vec_xyz(FRAME_H-FRAME_PHASE,0,-FRAME_PHASE));    n4 = vec_unit(vec_xyz(FRAME_H-FRAME_PHASE,0,-FRAME_PHASE));    for(i=0;i<segnr;i++){        if(nonconst_step){            y1 = -l/2.0*cos(M_PI*(double)i/(double)segnr);            y2 = -l/2.0*cos(M_PI*(double)(i+1)/(double)segnr);        } else {            y1 = -l/2.0+l*(double)i/(double)segnr;            y2 = -l/2.0+l*(double)(i+1)/(double)segnr;        }        tan1 = endtan*y1/(l/2.0);        tan2 = endtan*y2/(l/2.0);        v1 = vec_xyz(r1(y1/l*2.0),y1,FRAME_DH);       v1.y += tan1 * v1.x;        v2 = vec_xyz(r2-FRAME_PHASE,y1,0);            v2.y += tan1 * v2.x;        v3 = vec_xyz(r2,y1,-FRAME_PHASE);             v3.y += tan1 * v3.x;        v4 = vec_xyz(r2-FRAME_PHASE,y1,-FRAME_H);     v4.y += tan1 * v4.x;        v4_2 = vec_xyz(r2-FRAME_PHASE-1.0*FRAME_DW,y1,-FRAME_H);     v4_2.y += tan1 * v4_2.x;        v4_3 = vec_xyz(r2-FRAME_PHASE-2.0*FRAME_DW,y1,-FRAME_H2);    v4_3.y += tan1 * v4_3.x;        v5 = vec_xyz(r1(y2/l*2.0),y2,FRAME_DH);       v5.y += tan2 * v5.x;        v6 = vec_xyz(r2-FRAME_PHASE,y2,0);            v6.y += tan2 * v6.x;        v7 = vec_xyz(r2,y2,-FRAME_PHASE);             v7.y += tan2 * v7.x;        v8 = vec_xyz(r2-FRAME_PHASE,y2,-FRAME_H);     v8.y += tan2 * v8.x;        v8_2 = vec_xyz(r2-FRAME_PHASE-1.0*FRAME_DW,y2,-FRAME_H);     v8_2.y += tan2 * v8_2.x;        v8_3 = vec_xyz(r2-FRAME_PHASE-2.0*FRAME_DW,y2,-FRAME_H2);    v8_3.y += tan2 * v8_3.x;        if(!order){            glBegin(GL_QUAD_STRIP);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 0.0*0.5*tex_y);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 0.0*0.5*tex_y);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v5.x,v5.y,v5.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 0.9*0.5*tex_y);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 0.9*0.5*tex_y);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v6.x,v6.y,v6.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 1.0*0.5*tex_y);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 1.0*0.5*tex_y);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v7.x,v7.y,v7.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 2.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 2.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8.x,v8.y,v8.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_2.x,v4_2.y,v4_2.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_2.x,v8_2.y,v8_2.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_3.x,v4_3.y,v4_3.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_3.x,v8_3.y,v8_3.z);            glEnd();        } else {            glBegin(GL_QUAD_STRIP);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 0.0*0.5*tex_y);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v5.x,v5.y,v5.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 0.0*0.5*tex_y);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 0.9*0.5*tex_y);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v6.x,v6.y,v6.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 0.9*0.5*tex_y);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 1.0*0.5*tex_y);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v7.x,v7.y,v7.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 1.0*0.5*tex_y);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 2.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8.x,v8.y,v8.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 2.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_2.x,v8_2.y,v8_2.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_2.x,v4_2.y,v4_2.z);            glTexCoord2f((y2/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_3.x,v8_3.y,v8_3.z);            glTexCoord2f((y1/l+0.5)*0.4*tex_x, 3.0*0.5*tex_y);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_3.x,v4_3.y,v4_3.z);            glEnd();        }    }}double r2cover_caram( double y ){    double ampl;    y=fabs(y);    ampl=0.03;    if(y<0.2){        return( ampl*sin(2.0*M_PI*y/0.2*0.25) );    }else if(y>=0.15 && y<0.5){        return( ampl*(0.5+0.5*cos(4.0*M_PI*(y-0.15)/0.35*0.25)) );    }else if(y>=0.5 && y<0.75){        return( 0.7*ampl-0.7*ampl*cos(2.0*M_PI*(y-0.5)) );    }else if(y>=0.75 && y<=1.0){        return( 0.7*ampl-0.7*ampl*sin(3.7*M_PI*(y-0.75)) );    }    return( 0.0 );/*    if(y>0)        return( +0.02*sin(10.0*M_PI/4.0*y) );    else        return( -0.02*sin(10.0*M_PI/4.0*y) );*/}void my_Cover2func( int segnr, double (*r1)(double), double (*r2)(double), double l, int order, double endtan )/* edge shows to pos x,y direction*/{    int i;    double y1,y2;    double tan1, tan2;

⌨️ 快捷键说明

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