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

📄 table.c

📁 这是一个相当棒的Linux下的台球游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
    VMvect n1,n2,n3,n4,v1,v2,v3,v4,v5,v6,v7,v8, v4_2,v4_3, v8_2,v8_3;    double r2_1,r2_2;    double txfact=0.75;    double tyfact=6.0;    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(0){            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);        r2_1 = FRAME_D-BANDE_D+r2(y1/l*2.0);        r2_2 = FRAME_D-BANDE_D+r2(y2/l*2.0);        v1 = vec_xyz(r1(y1/l*2.0),y1,FRAME_DH);         v1.y += tan1 * v1.x;        v2 = vec_xyz(r2_1-FRAME_PHASE,y1,0);            v2.y += tan1 * v2.x;        v3 = vec_xyz(r2_1,y1,-FRAME_PHASE);             v3.y += tan1 * v3.x;        v4 = vec_xyz(r2_1-FRAME_PHASE,y1,-FRAME_H);     v4.y += tan1 * v4.x;        v4_2 = vec_xyz(r2_1-FRAME_PHASE-1.0*FRAME_DW,y1,-FRAME_H);      v4_2.y += tan1 * v4_2.x;        v4_3 = vec_xyz(r2_1-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_2-FRAME_PHASE,y2,0);            v6.y += tan2 * v6.x;        v7 = vec_xyz(r2_2,y2,-FRAME_PHASE);             v7.y += tan2 * v7.x;        v8 = vec_xyz(r2_2-FRAME_PHASE,y2,-FRAME_H);     v8.y += tan2 * v8.x;        v8_2 = vec_xyz(r2_2-FRAME_PHASE-1.0*FRAME_DW,y2,-FRAME_H);      v8_2.y += tan2 * v8_2.x;        v8_3 = vec_xyz(r2_2-FRAME_PHASE-2.0*FRAME_DW,y2,-FRAME_H2);     v8_3.y += tan2 * v8_3.x;        if(!order){            glBegin(GL_QUAD_STRIP);            glTexCoord2f(v1.y*txfact,v1.x*tyfact);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);            glTexCoord2f(v5.y*txfact,v5.x*tyfact);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v5.x,v5.y,v5.z);            glTexCoord2f(v2.y*txfact,v2.x*tyfact);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);            glTexCoord2f(v6.y*txfact,v6.x*tyfact);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v6.x,v6.y,v6.z);            glTexCoord2f(v3.y*txfact,v3.x*tyfact);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);            glTexCoord2f(v7.y*txfact,v7.x*tyfact);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v7.x,v7.y,v7.z);            glTexCoord2f(v4.y*txfact,v4.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);            glTexCoord2f(v8.y*txfact,v8.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8.x,v8.y,v8.z);            glTexCoord2f(v4_2.y*txfact,v4_2.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_2.x,v4_2.y,v4_2.z);            glTexCoord2f(v8_2.y*txfact,v8_2.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_2.x,v8_2.y,v8_2.z);            glTexCoord2f(v4_3.y*txfact,v4_3.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_3.x,v4_3.y,v4_3.z);            glTexCoord2f(v8_3.y*txfact,v8_3.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_3.x,v8_3.y,v8_3.z);            glEnd();        } else {            glBegin(GL_QUAD_STRIP);            glTexCoord2f(v5.y*txfact,v5.x*tyfact);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v5.x,v5.y,v5.z);            glTexCoord2f(v1.y*txfact,v1.x*tyfact);            glNormal3f(n1.x,n1.y,n1.z);            glVertex3f(v1.x,v1.y,v1.z);            glTexCoord2f(v6.y*txfact,v6.x*tyfact);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v6.x,v6.y,v6.z);            glTexCoord2f(v2.y*txfact,v2.x*tyfact);            glNormal3f(n2.x,n2.y,n2.z);            glVertex3f(v2.x,v2.y,v2.z);            glTexCoord2f(v7.y*txfact,v7.x*tyfact);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v7.x,v7.y,v7.z);            glTexCoord2f(v3.y*txfact,v3.x*tyfact);            glNormal3f(n3.x,n3.y,n3.z);            glVertex3f(v3.x,v3.y,v3.z);            glTexCoord2f(v8.y*txfact,v8.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8.x,v8.y,v8.z);            glTexCoord2f(v4.y*txfact,v4.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4.x,v4.y,v4.z);            glTexCoord2f(v8_2.y*txfact,v8_2.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_2.x,v8_2.y,v8_2.z);            glTexCoord2f(v4_2.y*txfact,v4_2.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_2.x,v4_2.y,v4_2.z);            glTexCoord2f(v8_3.y*txfact,v8_3.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v8_3.x,v8_3.y,v8_3.z);            glTexCoord2f(v4_3.y*txfact,v4_3.x*tyfact);            glNormal3f(n4.x,n4.y,n4.z);            glVertex3f(v4_3.x,v4_3.y,v4_3.z);            glEnd();        }    }}double scalefunc01( double x ){    return(scalefunc((x+1.0)*M_PI/4.0));}void my_CoverBumper( int segnr, double (*r1)(double), double (*sc)(double), double l, int order )/* edge shows to pos x,y direction*/{    int i;    double y1,y2, dphi1, dphi2;    VMvect v10,v20,v30,v40,n1,n2,n3,n4,n5,n6,n7,n8,n10,n20,n30,n40,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++){        if(nonconst_step){            y1 = -l*0.5*cos(M_PI*(double)i/(double)segnr);            y2 = -l*0.5*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;        }        dphi1 = atan( (r1((y1-0.001)/l*2.0)-r1((y1+0.001)/l*2.0))/0.002 );        dphi2 = atan( (r1((y2-0.001)/l*2.0)-r1((y2+0.001)/l*2.0))/0.002 );        n1 = vec_rotate(n10,vec_xyz(0,0,dphi1));        n2 = vec_rotate(n20,vec_xyz(0,0,dphi1));        n3 = vec_rotate(n30,vec_xyz(0,0,dphi1));        n4 = vec_rotate(n40,vec_xyz(0,0,dphi1));        n5 = vec_rotate(n10,vec_xyz(0,0,dphi2));        n6 = vec_rotate(n20,vec_xyz(0,0,dphi2));        n7 = vec_rotate(n30,vec_xyz(0,0,dphi2));        n8 = vec_rotate(n40,vec_xyz(0,0,dphi2));        v1 = vec_add(vec_scale(v10,sc(y1/l*2.0)),vec_xyz(r1(y1/l*2.0),y1,FRAME_DH));        v2 = vec_add(vec_scale(v20,sc(y1/l*2.0)),vec_xyz(r1(y1/l*2.0),y1,FRAME_DH));        v3 = vec_add(vec_scale(v30,sc(y1/l*2.0)),vec_xyz(r1(y1/l*2.0),y1,FRAME_DH));        v4 = vec_add(vec_scale(v40,sc(y1/l*2.0)),vec_xyz(r1(y1/l*2.0),y1,FRAME_DH));        v5 = vec_add(vec_scale(v10,sc(y2/l*2.0)),vec_xyz(r1(y2/l*2.0),y2,FRAME_DH));        v6 = vec_add(vec_scale(v20,sc(y2/l*2.0)),vec_xyz(r1(y2/l*2.0),y2,FRAME_DH));        v7 = vec_add(vec_scale(v30,sc(y2/l*2.0)),vec_xyz(r1(y2/l*2.0),y2,FRAME_DH));        v8 = vec_add(vec_scale(v40,sc(y2/l*2.0)),vec_xyz(r1(y2/l*2.0),y2,FRAME_DH));        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();*/    }}void my_Bande_old( float x1, float y1, float z1,    /* inside up */               float x2, float y2, float z2,    /* outside down */               float tan1, float tan2, int order ){/*   ^ y                        *  *   |                          *  *   .z -> x                    *  *                              *  *   4  8               9  7    *  * 0 \                     / 3  *  *     \5_______________6/      *  *     1                 2      */    float dummy;    VMvect p[10];    p[0]=vec_xyz(x1-(y2-y1)*tan1,y2,z1+FRAME_DH);//    p[1]=vec_xyz(x1,y1,z1-(z1-z2)*0.1);//    p[2]=vec_xyz(x2,y1,z1-(z1-z2)*0.1);    p[1]=vec_xyz(x1,y1,z1);    p[2]=vec_xyz(x2,y1,z1);    p[3]=vec_xyz(x2+(y2-y1)*tan2,y2,z1+FRAME_DH);    p[4]=vec_xyz(x1-(y2-y1)*tan1,y2,z2);    p[5]=vec_xyz(x1-(y2-y1)*BANDE_D2RATIO*tan1,y1+(y2-y1)*BANDE_D2RATIO,z2);    p[6]=vec_xyz(x2+(y2-y1)*BANDE_D2RATIO*tan2,y1+(y2-y1)*BANDE_D2RATIO,z2);    p[7]=vec_xyz(x2+(y2-y1)*tan2,y2,z2);    p[8]=vec_xyz(x1,y2,z1+FRAME_DH);    p[9]=vec_xyz(x2,y2,z1+FRAME_DH);    if( x1 > x2 ){ dummy=x1; x1=x2; x2=dummy; }    if( y1 > y2 ){ dummy=y1; y1=y2; y2=dummy; }    if( z1 > z2 ){ dummy=z1; z1=z2; z2=dummy; }        glBegin(GL_QUADS);       autonormalize_quad(p[1],p[2],p[9],p[8],order);       autonormalize_quad(p[5],p[6],p[2],p[1],order);    glEnd();    glBegin(GL_TRIANGLES);       autonormalize_triangle(p[0],p[1],p[8],order);       autonormalize_triangle(p[0],p[5],p[1],order);       autonormalize_triangle(p[0],p[4],p[5],order);       autonormalize_triangle(p[3],p[9],p[2],order);       autonormalize_triangle(p[3],p[2],p[6],order);       autonormalize_triangle(p[3],p[6],p[7],order);    glEnd();}void my_Bande( float x1, float y1, float z1,    /* inside up */               float x2, float y2, float z2,    /* outside down */               float tan1, float tan2, int order ){/*   ^ y                        *  *   |                          *  *   .z -> x                    *  *                              *  *   4  8               9  7    *  * 0 \                     / 3  *  *     \5_______________6/      *  *     1                 2      */    float dummy,sin1,sin2,cos1,cos2,r1,r2;    VMvect p[12];#define BANDE_WULST 0.006    p[0]=vec_xyz(x1-(y2-y1)*tan1,y2,z1+FRAME_DH);//    p[1]=vec_xyz(x1,y1,z1-(z1-z2)*0.1);//    p[2]=vec_xyz(x2,y1,z1-(z1-z2)*0.1);    p[1]=vec_xyz(x1,y1,z1-BANDE_WULST/2.0);    p[2]=vec_xyz(x2,y1,z1-BANDE_WULST/2.0);    p[3]=vec_xyz(x2+(y2-y1)*tan2,y2,z1+FRAME_DH);    p[4]=vec_xyz(x1-(y2-y1)*tan1,y2,z2);    p[5]=vec_xyz(x1-(y2-y1)*BANDE_D2RATIO*tan1,y1+(y2-y1)*BANDE_D2RATIO,z2);    p[6]=vec_xyz(x2+(y2-y1)*BANDE_D2RATIO*tan2,y1+(y2-y1)*BANDE_D2RATIO,z2);    p[7]=vec_xyz(x2+(y2-y1)*tan2,y2,z2);    p[8]=vec_xyz(x1,y2,z1+FRAME_DH);    p[9]=vec_xyz(x2,y2,z1+FRAME_DH);    p[10]=vec_xyz(x1,y1,z1+BANDE_WULST/2.0);    p[11]=vec_xyz(x2,y1,z1+BANDE_WULST/2.0);    if( x1 > x2 ){ dummy=x1; x1=x2; x2=dummy; }    if( y1 > y2 ){ dummy=y1; y1=y2; y2=dummy; }    if( z1 > z2 ){ dummy=z1; z1=z2; z2=dummy; }    r1=sqrt((FRAME_DH-BANDE_WULST)*(FRAME_DH-BANDE_WULST)+(y2-y1)*(y2-y1));    sin1=fabs((FRAME_DH-BANDE_WULST)/r1);    cos1=fabs((y2-y1)/r1);    r2=sqrt((y2-y1)*BANDE_D2RATIO*(y2-y1)*BANDE_D2RATIO+(z1-z2)*(z1-z2));    sin2=fabs((y2-y1)*BANDE_D2RATIO/r2);    cos2=fabs((z1-z2)/r2);    glBegin(GL_QUADS);       autonormalize_quad(p[10],p[11],p[9],p[8],order);       autonormalize_quad(p[5],p[6],p[2],p[1],order);       if(!order){           glNormal3f(0,-sin1,cos1);           glVertex3f(p[10].x,p[10].y,p[10].z);           glNormal3f(0,-sin1,cos1);           glVertex3f(p[11].x,p[11].y,p[11].z);           glNormal3f(0,-cos2,-sin2);           glVertex3f(p[2].x,p[2].y,p[2].z);           glNormal3f(0,-cos2,-sin2);           glVertex3f(p[1].x,p[1].y,p[1].z);       }else{           glNormal3f(0,-cos2,-sin2);           glVertex3f(p[1].x,p[1].y,p[1].z);           glNormal3f(0,-cos2,-sin2);           glVertex3f(p[2].x,p[2].y,p[2].z);           glNormal3f(0,-sin1,cos1);           glVertex3f(p[11].x,p[11].y,p[11].z);           glNormal3f(0,-sin1,cos1);           glVertex3f(p[10].x,p[10].y,p[10].z);

⌨️ 快捷键说明

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