/* MagicCube.c */ /* E. Angel, Interactive Computer Graphics */ /* A Top-Down Approach with OpenGL, Third Edition */ /* Addison-Wesley Longman, 2003 */ /* Rotating cube with viewer movement from Chapter 5 */ /* Cube definition and display similar to rotating--cube program */ /* Hisham Sueyllam, Modified to implement the Magic Cube, December 1, 2011 */ #include #include GLfloat verticesInit[][3] = {{-0.99,-0.99,-0.99},{0.99,-0.99,-0.99}, {0.99,0.99,-0.99}, {-0.99,0.99,-0.99}, {-0.99,-0.99,0.99}, {0.99,-0.99,0.99}, {0.99,0.99,0.99}, {-0.99,0.99,0.99}}; GLfloat vertices[][3] = {{-0.99,-0.99,-0.99},{0.99,-0.99,-0.99}, {0.99,0.99,-0.99}, {-0.99,0.99,-0.99}, {-0.99,-0.99,0.99}, {0.99,-0.99,0.99}, {0.99,0.99,0.99}, {-0.99,0.99,0.99}}; GLint ww=500, wh=500; GLfloat colors[][9][3] = { {{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0}}, {{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0},{1.0,0.5,0.0}}, {{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0},{0.0,1.0,0.0}}, {{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0},{1.0,1.0,0.0}}, {{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,1.0,1.0}}, {{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0},{0.0,0.0,1.0}}, {{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0},{0.0,0.0,0.0}}, {{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0},{1.0,0.0,0.0}}}; int gbtn, gstate, rflag = 0; static GLfloat theta[] = {0.0,0.0,0.0}; static GLdouble viewer[]= {0.0, 0.0, 5.0}; /* initial viewer location */ void rotateFacade(int vr, int dir) { GLfloat tcolors[3]; if (dir) { tcolors[0] = colors[vr][0][0]; tcolors[1] = colors[vr][0][1]; tcolors[2] = colors[vr][0][2]; colors[vr][0][0] = colors[vr][6][0]; colors[vr][0][1] = colors[vr][6][1]; colors[vr][0][2] = colors[vr][6][2]; colors[vr][6][0] = colors[vr][8][0]; colors[vr][6][1] = colors[vr][8][1]; colors[vr][6][2] = colors[vr][8][2]; colors[vr][8][0] = colors[vr][2][0]; colors[vr][8][1] = colors[vr][2][1]; colors[vr][8][2] = colors[vr][2][2]; colors[vr][2][0] = tcolors[0]; colors[vr][2][1] = tcolors[1]; colors[vr][2][2] = tcolors[2]; tcolors[0] = colors[vr][1][0]; tcolors[1] = colors[vr][1][1]; tcolors[2] = colors[vr][1][2]; colors[vr][1][0] = colors[vr][5][0]; colors[vr][1][1] = colors[vr][5][1]; colors[vr][1][2] = colors[vr][5][2]; colors[vr][5][0] = colors[vr][7][0]; colors[vr][5][1] = colors[vr][7][1]; colors[vr][5][2] = colors[vr][7][2]; colors[vr][7][0] = colors[vr][3][0]; colors[vr][7][1] = colors[vr][3][1]; colors[vr][7][2] = colors[vr][3][2]; colors[vr][3][0] = tcolors[0]; colors[vr][3][1] = tcolors[1]; colors[vr][3][2] = tcolors[2]; } else { tcolors[0] = colors[vr][0][0]; tcolors[1] = colors[vr][0][1]; tcolors[2] = colors[vr][0][2]; colors[vr][0][0] = colors[vr][2][0]; colors[vr][0][1] = colors[vr][2][1]; colors[vr][0][2] = colors[vr][2][2]; colors[vr][2][0] = colors[vr][8][0]; colors[vr][2][1] = colors[vr][8][1]; colors[vr][2][2] = colors[vr][8][2]; colors[vr][8][0] = colors[vr][6][0]; colors[vr][8][1] = colors[vr][6][1]; colors[vr][8][2] = colors[vr][6][2]; colors[vr][6][0] = tcolors[0]; colors[vr][6][1] = tcolors[1]; colors[vr][6][2] = tcolors[2]; tcolors[0] = colors[vr][1][0]; tcolors[1] = colors[vr][1][1]; tcolors[2] = colors[vr][1][2]; colors[vr][1][0] = colors[vr][3][0]; colors[vr][1][1] = colors[vr][3][1]; colors[vr][1][2] = colors[vr][3][2]; colors[vr][3][0] = colors[vr][7][0]; colors[vr][3][1] = colors[vr][7][1]; colors[vr][3][2] = colors[vr][7][2]; colors[vr][7][0] = colors[vr][5][0]; colors[vr][7][1] = colors[vr][5][1]; colors[vr][7][2] = colors[vr][5][2]; colors[vr][5][0] = tcolors[0]; colors[vr][5][1] = tcolors[1]; colors[vr][5][2] = tcolors[2]; } } void rotateFace(int vr1, int c11, int c12, int c13, int vr2, int c21, int c22, int c23, int vr3, int c31, int c32, int c33, int vr4, int c41, int c42, int c43) { GLfloat tcolors[3][3]; tcolors[0][0] = colors[vr1][c11][0]; tcolors[0][1] = colors[vr1][c11][1]; tcolors[0][2] = colors[vr1][c11][2]; tcolors[1][0] = colors[vr1][c12][0]; tcolors[1][1] = colors[vr1][c12][1]; tcolors[1][2] = colors[vr1][c12][2]; tcolors[2][0] = colors[vr1][c13][0]; tcolors[2][1] = colors[vr1][c13][1]; tcolors[2][2] = colors[vr1][c13][2]; colors[vr1][c11][0] = colors[vr4][c41][0]; colors[vr1][c11][1] = colors[vr4][c41][1]; colors[vr1][c11][2] = colors[vr4][c41][2]; colors[vr1][c12][0] = colors[vr4][c42][0]; colors[vr1][c12][1] = colors[vr4][c42][1]; colors[vr1][c12][2] = colors[vr4][c42][2]; colors[vr1][c13][0] = colors[vr4][c43][0]; colors[vr1][c13][1] = colors[vr4][c43][1]; colors[vr1][c13][2] = colors[vr4][c43][2]; colors[vr4][c41][0] = colors[vr3][c31][0]; colors[vr4][c41][1] = colors[vr3][c31][1]; colors[vr4][c41][2] = colors[vr3][c31][2]; colors[vr4][c42][0] = colors[vr3][c32][0]; colors[vr4][c42][1] = colors[vr3][c32][1]; colors[vr4][c42][2] = colors[vr3][c32][2]; colors[vr4][c43][0] = colors[vr3][c33][0]; colors[vr4][c43][1] = colors[vr3][c33][1]; colors[vr4][c43][2] = colors[vr3][c33][2]; colors[vr3][c31][0] = colors[vr2][c21][0]; colors[vr3][c31][1] = colors[vr2][c21][1]; colors[vr3][c31][2] = colors[vr2][c21][2]; colors[vr3][c32][0] = colors[vr2][c22][0]; colors[vr3][c32][1] = colors[vr2][c22][1]; colors[vr3][c32][2] = colors[vr2][c22][2]; colors[vr3][c33][0] = colors[vr2][c23][0]; colors[vr3][c33][1] = colors[vr2][c23][1]; colors[vr3][c33][2] = colors[vr2][c23][2]; colors[vr2][c21][0] = tcolors[0][0]; colors[vr2][c21][1] = tcolors[0][1]; colors[vr2][c21][2] = tcolors[0][2]; colors[vr2][c22][0] = tcolors[1][0]; colors[vr2][c22][1] = tcolors[1][1]; colors[vr2][c22][2] = tcolors[1][2]; colors[vr2][c23][0] = tcolors[2][0]; colors[vr2][c23][1] = tcolors[2][1]; colors[vr2][c23][2] = tcolors[2][2]; } void polygon(int a, int b, int c , int dl, GLenum mode) { float d = 0.03, s = 0.3; if (rflag==a || (rflag==4&&(a==5||a==7)) || (rflag==5&&(a==1||a==4)) || (rflag==1&&(a==2||a==5)) || (rflag==3&&(a==1||a==2)) || (rflag==7&&(a==3||a==4)) || (rflag==2&&(a==3||a==7))) { glBegin(GL_POLYGON); glColor3fv(colors[a][0]); glVertex3fv(vertices[a]); glVertex3f((float)((2*s+3*d)*vertices[a][0]+s*vertices[b][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][1]+s*vertices[b][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][2]+s*vertices[b][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[dl][0]+s*s*vertices[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[dl][1]+s*s*vertices[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[dl][2]+s*s*vertices[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[a][0]+s*vertices[dl][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][1]+s*vertices[dl][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][2]+s*vertices[dl][2])/(3*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][0]); glVertex3fv(verticesInit[a]); glVertex3f((float)((2*s+3*d)*verticesInit[a][0]+s*verticesInit[b][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][1]+s*verticesInit[b][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][2]+s*verticesInit[b][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*s*verticesInit[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*s*verticesInit[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*s*verticesInit[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[a][0]+s*verticesInit[dl][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][1]+s*verticesInit[dl][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][2]+s*verticesInit[dl][2])/(3*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==5)) || (rflag==5&&(a==4)) || (rflag==3&&(a==1||a==2)) || (rflag==2&&(a==3||a==7))) { glBegin(GL_POLYGON); glColor3fv(colors[a][1]); glVertex3f((float)((4*s+3*d)*vertices[a][0]+(2*s+3*d)*vertices[b][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][1]+(2*s+3*d)*vertices[b][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][2]+(2*s+3*d)*vertices[b][2])/(6*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[b][0]+(2*s+3*d)*vertices[a][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][1]+(2*s+3*d)*vertices[a][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][2]+(2*s+3*d)*vertices[a][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][0]+(4*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(4*s+3*d)*vertices[c][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][1]+(4*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(4*s+3*d)*vertices[c][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][2]+(4*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(4*s+3*d)*vertices[c][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][0]+(4*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(4*s+3*d)*vertices[dl][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][1]+(4*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(4*s+3*d)*vertices[dl][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][2]+(4*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(4*s+3*d)*vertices[dl][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][2])/(18*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][1]); glVertex3f((float)((4*s+3*d)*verticesInit[a][0]+(2*s+3*d)*verticesInit[b][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][1]+(2*s+3*d)*verticesInit[b][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][2]+(2*s+3*d)*verticesInit[b][2])/(6*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[b][0]+(2*s+3*d)*verticesInit[a][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][1]+(2*s+3*d)*verticesInit[a][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][2]+(2*s+3*d)*verticesInit[a][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(4*s+3*d)*verticesInit[c][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(4*s+3*d)*verticesInit[c][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(4*s+3*d)*verticesInit[c][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(4*s+3*d)*verticesInit[dl][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(4*s+3*d)*verticesInit[dl][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(4*s+3*d)*verticesInit[dl][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][2])/(18*(s+d)*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==5)) || (rflag==5&&(a==4)) || (rflag==1&&(a==3||a==4)) || (rflag==3&&(a==1||a==2||a==7)) || (rflag==7&&(a==2||a==5)) || (rflag==2&&(a==1||a==3||a==7))) { glBegin(GL_POLYGON); glColor3fv(colors[a][2]); glVertex3f((float)((2*s+3*d)*vertices[b][0]+s*vertices[a][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][1]+s*vertices[a][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][2]+s*vertices[a][2])/(3*(s+d))); glVertex3fv(vertices[b]); glVertex3f((float)((2*s+3*d)*vertices[b][0]+s*vertices[c][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][1]+s*vertices[c][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][2]+s*vertices[c][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[c][0]+s*s*vertices[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[c][1]+s*s*vertices[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[c][2]+s*s*vertices[dl][2])/(9*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][2]); glVertex3f((float)((2*s+3*d)*verticesInit[b][0]+s*verticesInit[a][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][1]+s*verticesInit[a][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][2]+s*verticesInit[a][2])/(3*(s+d))); glVertex3fv(verticesInit[b]); glVertex3f((float)((2*s+3*d)*verticesInit[b][0]+s*verticesInit[c][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][1]+s*verticesInit[c][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][2]+s*verticesInit[c][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[c][0]+s*s*verticesInit[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[c][1]+s*s*verticesInit[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[c][2]+s*s*verticesInit[dl][2])/(9*(s+d)*(s+d))); glEnd(); } if (rflag==a || (rflag==1&&(a==3||a==4)) || (rflag==3&&(a==7)) || (rflag==7&&(a==2||a==5)) || (rflag==2&&(a==1))) { glBegin(GL_POLYGON); glColor3fv(colors[a][3]); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][0]+(4*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(4*s+3*d)*vertices[a][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][1]+(4*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(4*s+3*d)*vertices[a][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][2]+(4*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(4*s+3*d)*vertices[a][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[b][0]+(2*s+3*d)*vertices[c][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][1]+(2*s+3*d)*vertices[c][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][2]+(2*s+3*d)*vertices[c][2])/(6*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[c][0]+(2*s+3*d)*vertices[b][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][1]+(2*s+3*d)*vertices[b][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][2]+(2*s+3*d)*vertices[b][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][0]+(4*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(4*s+3*d)*vertices[dl][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][1]+(4*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(4*s+3*d)*vertices[dl][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][2]+(4*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(4*s+3*d)*vertices[dl][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][2])/(18*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][3]); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(4*s+3*d)*verticesInit[a][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(4*s+3*d)*verticesInit[a][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(4*s+3*d)*verticesInit[a][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[b][0]+(2*s+3*d)*verticesInit[c][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][1]+(2*s+3*d)*verticesInit[c][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][2]+(2*s+3*d)*verticesInit[c][2])/(6*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[c][0]+(2*s+3*d)*verticesInit[b][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][1]+(2*s+3*d)*verticesInit[b][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][2]+(2*s+3*d)*verticesInit[b][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(4*s+3*d)*verticesInit[dl][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(4*s+3*d)*verticesInit[dl][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(4*s+3*d)*verticesInit[dl][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][2])/(18*(s+d)*(s+d))); glEnd(); } if (rflag==a) { glBegin(GL_POLYGON); glColor3fv(colors[a][4]); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*vertices[a][0]+(2*s+3*d)*(4*s+3*d)*(vertices[b][0]+vertices[dl][0])+(2*s+3*d)*(2*s+3*d)*vertices[c][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[a][1]+(2*s+3*d)*(4*s+3*d)*(vertices[b][1]+vertices[dl][1])+(2*s+3*d)*(2*s+3*d)*vertices[c][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[a][2]+(2*s+3*d)*(4*s+3*d)*(vertices[b][2]+vertices[dl][2])+(2*s+3*d)*(2*s+3*d)*vertices[c][2])/(36*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*vertices[b][0]+(2*s+3*d)*(4*s+3*d)*(vertices[a][0]+vertices[c][0])+(2*s+3*d)*(2*s+3*d)*vertices[dl][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[b][1]+(2*s+3*d)*(4*s+3*d)*(vertices[a][1]+vertices[c][1])+(2*s+3*d)*(2*s+3*d)*vertices[dl][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[b][2]+(2*s+3*d)*(4*s+3*d)*(vertices[a][2]+vertices[c][2])+(2*s+3*d)*(2*s+3*d)*vertices[dl][2])/(36*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*vertices[c][0]+(2*s+3*d)*(4*s+3*d)*(vertices[dl][0]+vertices[b][0])+(2*s+3*d)*(2*s+3*d)*vertices[a][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[c][1]+(2*s+3*d)*(4*s+3*d)*(vertices[dl][1]+vertices[b][1])+(2*s+3*d)*(2*s+3*d)*vertices[a][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[c][2]+(2*s+3*d)*(4*s+3*d)*(vertices[dl][2]+vertices[b][2])+(2*s+3*d)*(2*s+3*d)*vertices[a][2])/(36*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*vertices[dl][0]+(2*s+3*d)*(4*s+3*d)*(vertices[c][0]+vertices[a][0])+(2*s+3*d)*(2*s+3*d)*vertices[b][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[dl][1]+(2*s+3*d)*(4*s+3*d)*(vertices[c][1]+vertices[a][1])+(2*s+3*d)*(2*s+3*d)*vertices[b][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*vertices[dl][2]+(2*s+3*d)*(4*s+3*d)*(vertices[c][2]+vertices[a][2])+(2*s+3*d)*(2*s+3*d)*vertices[b][2])/(36*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][4]); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*verticesInit[a][0]+(2*s+3*d)*(4*s+3*d)*(verticesInit[b][0]+verticesInit[dl][0])+(2*s+3*d)*(2*s+3*d)*verticesInit[c][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[a][1]+(2*s+3*d)*(4*s+3*d)*(verticesInit[b][1]+verticesInit[dl][1])+(2*s+3*d)*(2*s+3*d)*verticesInit[c][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[a][2]+(2*s+3*d)*(4*s+3*d)*(verticesInit[b][2]+verticesInit[dl][2])+(2*s+3*d)*(2*s+3*d)*verticesInit[c][2])/(36*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*verticesInit[b][0]+(2*s+3*d)*(4*s+3*d)*(verticesInit[a][0]+verticesInit[c][0])+(2*s+3*d)*(2*s+3*d)*verticesInit[dl][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[b][1]+(2*s+3*d)*(4*s+3*d)*(verticesInit[a][1]+verticesInit[c][1])+(2*s+3*d)*(2*s+3*d)*verticesInit[dl][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[b][2]+(2*s+3*d)*(4*s+3*d)*(verticesInit[a][2]+verticesInit[c][2])+(2*s+3*d)*(2*s+3*d)*verticesInit[dl][2])/(36*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*verticesInit[c][0]+(2*s+3*d)*(4*s+3*d)*(verticesInit[dl][0]+verticesInit[b][0])+(2*s+3*d)*(2*s+3*d)*verticesInit[a][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[c][1]+(2*s+3*d)*(4*s+3*d)*(verticesInit[dl][1]+verticesInit[b][1])+(2*s+3*d)*(2*s+3*d)*verticesInit[a][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[c][2]+(2*s+3*d)*(4*s+3*d)*(verticesInit[dl][2]+verticesInit[b][2])+(2*s+3*d)*(2*s+3*d)*verticesInit[a][2])/(36*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*(4*s+3*d)*verticesInit[dl][0]+(2*s+3*d)*(4*s+3*d)*(verticesInit[c][0]+verticesInit[a][0])+(2*s+3*d)*(2*s+3*d)*verticesInit[b][0])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[dl][1]+(2*s+3*d)*(4*s+3*d)*(verticesInit[c][1]+verticesInit[a][1])+(2*s+3*d)*(2*s+3*d)*verticesInit[b][1])/(36*(s+d)*(s+d)), (float)((4*s+3*d)*(4*s+3*d)*verticesInit[dl][2]+(2*s+3*d)*(4*s+3*d)*(verticesInit[c][2]+verticesInit[a][2])+(2*s+3*d)*(2*s+3*d)*verticesInit[b][2])/(36*(s+d)*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==7)) || (rflag==5&&(a==1)) || (rflag==1&&(a==2||a==5)) || (rflag==7&&(a==3||a==4))) { glBegin(GL_POLYGON); glColor3fv(colors[a][5]); glVertex3f((float)((4*s+3*d)*vertices[a][0]+(2*s+3*d)*vertices[dl][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][1]+(2*s+3*d)*vertices[dl][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][2]+(2*s+3*d)*vertices[dl][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][0]+(4*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(4*s+3*d)*vertices[b][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][1]+(4*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(4*s+3*d)*vertices[b][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][2]+(4*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(4*s+3*d)*vertices[b][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][0]+(4*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(4*s+3*d)*vertices[c][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][1]+(4*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(4*s+3*d)*vertices[c][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][2]+(4*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(4*s+3*d)*vertices[c][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[dl][0]+(2*s+3*d)*vertices[a][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][1]+(2*s+3*d)*vertices[a][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][2]+(2*s+3*d)*vertices[a][2])/(6*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][5]); glVertex3f((float)((4*s+3*d)*verticesInit[a][0]+(2*s+3*d)*verticesInit[dl][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][1]+(2*s+3*d)*verticesInit[dl][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][2]+(2*s+3*d)*verticesInit[dl][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(4*s+3*d)*verticesInit[b][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(4*s+3*d)*verticesInit[b][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(4*s+3*d)*verticesInit[b][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(4*s+3*d)*verticesInit[c][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(4*s+3*d)*verticesInit[c][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(4*s+3*d)*verticesInit[c][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[dl][0]+(2*s+3*d)*verticesInit[a][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][1]+(2*s+3*d)*verticesInit[a][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][2]+(2*s+3*d)*verticesInit[a][2])/(6*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==7||a==1||a==2)) || (rflag==5&&(a==1||a==3||a==7)) || (rflag==1&&(a==2||a==5)) || (rflag==3&&(a==5)) || (rflag==7&&(a==3||a==4)) || (rflag==2&&(a==4))) { glBegin(GL_POLYGON); glColor3fv(colors[a][6]); glVertex3f((float)((2*s+3*d)*vertices[dl][0]+s*vertices[a][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][1]+s*vertices[a][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][2]+s*vertices[a][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[a][0]+s*s*vertices[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[a][1]+s*s*vertices[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[a][2]+s*s*vertices[b][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[dl][0]+s*vertices[c][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][1]+s*vertices[c][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][2]+s*vertices[c][2])/(3*(s+d))); glVertex3fv(vertices[dl]); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][6]); glVertex3f((float)((2*s+3*d)*verticesInit[dl][0]+s*verticesInit[a][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][1]+s*verticesInit[a][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][2]+s*verticesInit[a][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[a][0]+s*s*verticesInit[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[a][1]+s*s*verticesInit[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[a][2]+s*s*verticesInit[b][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[dl][0]+s*verticesInit[c][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][1]+s*verticesInit[c][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][2]+s*verticesInit[c][2])/(3*(s+d))); glVertex3fv(verticesInit[dl]); glEnd(); } if (rflag==a || (rflag==4&&(a==1||a==2)) || (rflag==5&&(a==3||a==7)) || (rflag==3&&(a==5)) || (rflag==2&&(a==4))) { glBegin(GL_POLYGON); glColor3fv(colors[a][7]); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][0]+(4*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(4*s+3*d)*vertices[a][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][1]+(4*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(4*s+3*d)*vertices[a][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][2]+(4*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(4*s+3*d)*vertices[a][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][0]+(4*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(4*s+3*d)*vertices[b][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][1]+(4*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(4*s+3*d)*vertices[b][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][2]+(4*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(4*s+3*d)*vertices[b][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[c][0]+(2*s+3*d)*vertices[dl][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][1]+(2*s+3*d)*vertices[dl][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][2]+(2*s+3*d)*vertices[dl][2])/(6*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[dl][0]+(2*s+3*d)*vertices[c][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][1]+(2*s+3*d)*vertices[c][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][2]+(2*s+3*d)*vertices[c][2])/(6*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][7]); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(4*s+3*d)*verticesInit[a][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(4*s+3*d)*verticesInit[a][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(4*s+3*d)*verticesInit[a][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(4*s+3*d)*verticesInit[b][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(4*s+3*d)*verticesInit[b][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(4*s+3*d)*verticesInit[b][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[c][0]+(2*s+3*d)*verticesInit[dl][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][1]+(2*s+3*d)*verticesInit[dl][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][2]+(2*s+3*d)*verticesInit[dl][2])/(6*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[dl][0]+(2*s+3*d)*verticesInit[c][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][1]+(2*s+3*d)*verticesInit[c][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][2]+(2*s+3*d)*verticesInit[c][2])/(6*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==1||a==2)) || (rflag==5&&(a==3||a==7)) || (rflag==1&&(a==3||a==4)) || (rflag==3&&(a==5||a==7)) || (rflag==7&&(a==2||a==5)) || (rflag==2&&(a==1||a==4))) { glBegin(GL_POLYGON); glColor3fv(colors[a][8]); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[b][0]+s*s*vertices[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[b][1]+s*s*vertices[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[b][2]+s*s*vertices[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[c][0]+s*vertices[b][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][1]+s*vertices[b][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][2]+s*vertices[b][2])/(3*(s+d))); glVertex3fv(vertices[c]); glVertex3f((float)((2*s+3*d)*vertices[c][0]+s*vertices[dl][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][1]+s*vertices[dl][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][2]+s*vertices[dl][2])/(3*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glColor3fv(colors[a][8]); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[b][0]+s*s*verticesInit[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[b][1]+s*s*verticesInit[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[b][2]+s*s*verticesInit[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[c][0]+s*verticesInit[b][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][1]+s*verticesInit[b][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][2]+s*verticesInit[b][2])/(3*(s+d))); glVertex3fv(verticesInit[c]); glVertex3f((float)((2*s+3*d)*verticesInit[c][0]+s*verticesInit[dl][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][1]+s*verticesInit[dl][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][2]+s*verticesInit[dl][2])/(3*(s+d))); glEnd(); } glColor3f(0.0,0.0,0.0); if (rflag==a) { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[dl][0]+s*s*vertices[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[dl][1]+s*s*vertices[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[dl][2]+s*s*vertices[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][0]+(4*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(4*s+3*d)*vertices[dl][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][1]+(4*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(4*s+3*d)*vertices[dl][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][2]+(4*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(4*s+3*d)*vertices[dl][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][0]+(4*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(4*s+3*d)*vertices[a][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][1]+(4*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(4*s+3*d)*vertices[a][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][2]+(4*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(4*s+3*d)*vertices[a][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[a][0]+s*s*vertices[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[a][1]+s*s*vertices[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[a][2]+s*s*vertices[b][2])/(9*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][0]+(4*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(4*s+3*d)*vertices[c][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][1]+(4*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(4*s+3*d)*vertices[c][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][2]+(4*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(4*s+3*d)*vertices[c][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[c][0]+s*s*vertices[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[c][1]+s*s*vertices[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[c][2]+s*s*vertices[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[b][0]+s*s*vertices[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[b][1]+s*s*vertices[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[b][2]+s*s*vertices[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][0]+(4*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(4*s+3*d)*vertices[b][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][1]+(4*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(4*s+3*d)*vertices[b][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][2]+(4*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(4*s+3*d)*vertices[b][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][2])/(18*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[dl][0]+s*s*vertices[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[dl][1]+s*s*vertices[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[dl][2]+s*s*vertices[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[c][0]+s*s*vertices[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[c][1]+s*s*vertices[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[c][2]+s*s*vertices[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][0]+(4*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(4*s+3*d)*vertices[a][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][1]+(4*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(4*s+3*d)*vertices[a][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][2]+(4*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(4*s+3*d)*vertices[a][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][0]+(4*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(4*s+3*d)*vertices[b][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][1]+(4*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(4*s+3*d)*vertices[b][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][2]+(4*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(4*s+3*d)*vertices[b][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][2])/(18*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][0]+(4*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(4*s+3*d)*vertices[c][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][1]+(4*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(4*s+3*d)*vertices[c][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][2]+(4*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(4*s+3*d)*vertices[c][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][0]+(4*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(4*s+3*d)*vertices[dl][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][1]+(4*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(4*s+3*d)*vertices[dl][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][2]+(4*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(4*s+3*d)*vertices[dl][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[b][0]+s*s*vertices[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[b][1]+s*s*vertices[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[b][2]+s*s*vertices[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[a][0]+s*s*vertices[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[a][1]+s*s*vertices[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[a][2]+s*s*vertices[b][2])/(9*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*s*verticesInit[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*s*verticesInit[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*s*verticesInit[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(4*s+3*d)*verticesInit[dl][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(4*s+3*d)*verticesInit[dl][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(4*s+3*d)*verticesInit[dl][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(4*s+3*d)*verticesInit[a][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(4*s+3*d)*verticesInit[a][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(4*s+3*d)*verticesInit[a][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[a][0]+s*s*verticesInit[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[a][1]+s*s*verticesInit[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[a][2]+s*s*verticesInit[b][2])/(9*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(4*s+3*d)*verticesInit[c][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(4*s+3*d)*verticesInit[c][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(4*s+3*d)*verticesInit[c][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[c][0]+s*s*verticesInit[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[c][1]+s*s*verticesInit[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[c][2]+s*s*verticesInit[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[b][0]+s*s*verticesInit[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[b][1]+s*s*verticesInit[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[b][2]+s*s*verticesInit[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(4*s+3*d)*verticesInit[b][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(4*s+3*d)*verticesInit[b][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(4*s+3*d)*verticesInit[b][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][2])/(18*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*s*verticesInit[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*s*verticesInit[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*s*verticesInit[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[c][0]+s*s*verticesInit[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[c][1]+s*s*verticesInit[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[c][2]+s*s*verticesInit[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(4*s+3*d)*verticesInit[a][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(4*s+3*d)*verticesInit[a][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(4*s+3*d)*verticesInit[a][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(4*s+3*d)*verticesInit[b][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(4*s+3*d)*verticesInit[b][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(4*s+3*d)*verticesInit[b][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][2])/(18*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(4*s+3*d)*verticesInit[c][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(4*s+3*d)*verticesInit[c][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(4*s+3*d)*verticesInit[c][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(4*s+3*d)*verticesInit[dl][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(4*s+3*d)*verticesInit[dl][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(4*s+3*d)*verticesInit[dl][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[b][0]+s*s*verticesInit[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[b][1]+s*s*verticesInit[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[b][2]+s*s*verticesInit[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[a][0]+s*s*verticesInit[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[a][1]+s*s*verticesInit[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[a][2]+s*s*verticesInit[b][2])/(9*(s+d)*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==5)) || (rflag==5&&(a==4)) || (rflag==3&&(a==1||a==2)) || (rflag==2&&(a==3||a==7))) { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*vertices[a][0]+s*vertices[b][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][1]+s*vertices[b][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][2]+s*vertices[b][2])/(3*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[a][0]+(2*s+3*d)*vertices[b][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][1]+(2*s+3*d)*vertices[b][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][2]+(2*s+3*d)*vertices[b][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][0]+(4*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(4*s+3*d)*vertices[dl][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][1]+(4*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(4*s+3*d)*vertices[dl][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][2]+(4*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(4*s+3*d)*vertices[dl][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[dl][0]+s*s*vertices[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[dl][1]+s*s*vertices[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[dl][2]+s*s*vertices[c][2])/(9*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)((4*s+3*d)*vertices[b][0]+(2*s+3*d)*vertices[a][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][1]+(2*s+3*d)*vertices[a][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][2]+(2*s+3*d)*vertices[a][2])/(6*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[b][0]+s*vertices[a][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][1]+s*vertices[a][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][2]+s*vertices[a][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[c][0]+s*s*vertices[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[c][1]+s*s*vertices[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[c][2]+s*s*vertices[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][0]+(4*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(4*s+3*d)*vertices[c][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][1]+(4*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(4*s+3*d)*vertices[c][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][2]+(4*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(4*s+3*d)*vertices[c][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][2])/(18*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*verticesInit[a][0]+s*verticesInit[b][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][1]+s*verticesInit[b][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][2]+s*verticesInit[b][2])/(3*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[a][0]+(2*s+3*d)*verticesInit[b][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][1]+(2*s+3*d)*verticesInit[b][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][2]+(2*s+3*d)*verticesInit[b][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(4*s+3*d)*verticesInit[dl][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(4*s+3*d)*verticesInit[dl][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(4*s+3*d)*verticesInit[dl][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*s*verticesInit[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*s*verticesInit[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*s*verticesInit[c][2])/(9*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)((4*s+3*d)*verticesInit[b][0]+(2*s+3*d)*verticesInit[a][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][1]+(2*s+3*d)*verticesInit[a][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][2]+(2*s+3*d)*verticesInit[a][2])/(6*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[b][0]+s*verticesInit[a][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][1]+s*verticesInit[a][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][2]+s*verticesInit[a][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[c][0]+s*s*verticesInit[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[c][1]+s*s*verticesInit[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[c][2]+s*s*verticesInit[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(4*s+3*d)*verticesInit[c][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(4*s+3*d)*verticesInit[c][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(4*s+3*d)*verticesInit[c][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][2])/(18*(s+d)*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==7)) || (rflag==5&&(a==1)) || (rflag==1&&(a==2)) || (rflag==7&&(a==3||a==4))) { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*vertices[a][0]+s*vertices[dl][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][1]+s*vertices[dl][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[a][2]+s*vertices[dl][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[dl][0]+s*s*vertices[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[dl][1]+s*s*vertices[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[dl][2]+s*s*vertices[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][0]+(4*s+3*d)*(2*s+3*d)*vertices[a][0]+s*(4*s+3*d)*vertices[b][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][1]+(4*s+3*d)*(2*s+3*d)*vertices[a][1]+s*(4*s+3*d)*vertices[b][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][2]+(4*s+3*d)*(2*s+3*d)*vertices[a][2]+s*(4*s+3*d)*vertices[b][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[a][0]+(2*s+3*d)*vertices[dl][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][1]+(2*s+3*d)*vertices[dl][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[a][2]+(2*s+3*d)*vertices[dl][2])/(6*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)((4*s+3*d)*vertices[dl][0]+(2*s+3*d)*vertices[a][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][1]+(2*s+3*d)*vertices[a][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][2]+(2*s+3*d)*vertices[a][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][0]+(4*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(4*s+3*d)*vertices[c][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][1]+(4*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(4*s+3*d)*vertices[c][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[a][2]+(4*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(4*s+3*d)*vertices[c][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[a][0]+s*s*vertices[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[a][1]+s*s*vertices[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[a][2]+s*s*vertices[b][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[dl][0]+s*vertices[a][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][1]+s*vertices[a][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][2]+s*vertices[a][2])/(3*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*verticesInit[a][0]+s*verticesInit[dl][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][1]+s*verticesInit[dl][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[a][2]+s*verticesInit[dl][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*s*verticesInit[c][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*s*verticesInit[c][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*s*verticesInit[c][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][0]+s*(4*s+3*d)*verticesInit[b][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][1]+s*(4*s+3*d)*verticesInit[b][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[a][2]+s*(4*s+3*d)*verticesInit[b][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[c][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[a][0]+(2*s+3*d)*verticesInit[dl][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][1]+(2*s+3*d)*verticesInit[dl][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[a][2]+(2*s+3*d)*verticesInit[dl][2])/(6*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)((4*s+3*d)*verticesInit[dl][0]+(2*s+3*d)*verticesInit[a][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][1]+(2*s+3*d)*verticesInit[a][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][2]+(2*s+3*d)*verticesInit[a][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(4*s+3*d)*verticesInit[c][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(4*s+3*d)*verticesInit[c][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[a][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(4*s+3*d)*verticesInit[c][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[a][0]+s*s*verticesInit[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[a][1]+s*s*verticesInit[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[a][2]+s*s*verticesInit[b][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[dl][0]+s*verticesInit[a][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][1]+s*verticesInit[a][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][2]+s*verticesInit[a][2])/(3*(s+d))); glEnd(); } if (rflag==a || (rflag==1&&(a==3||a==4)) || (rflag==3&&(a==7)) || (rflag==7&&(a==2||a==5)) || (rflag==2&&(a==1))) { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(2*s+3*d)*vertices[a][0]+s*(2*s+3*d)*vertices[c][0]+s*s*vertices[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(2*s+3*d)*vertices[a][1]+s*(2*s+3*d)*vertices[c][1]+s*s*vertices[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(2*s+3*d)*vertices[a][2]+s*(2*s+3*d)*vertices[c][2]+s*s*vertices[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[b][0]+s*vertices[c][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][1]+s*vertices[c][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[b][2]+s*vertices[c][2])/(3*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[b][0]+(2*s+3*d)*vertices[c][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][1]+(2*s+3*d)*vertices[c][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[b][2]+(2*s+3*d)*vertices[c][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][0]+(4*s+3*d)*(2*s+3*d)*vertices[b][0]+s*(4*s+3*d)*vertices[a][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][1]+(4*s+3*d)*(2*s+3*d)*vertices[b][1]+s*(4*s+3*d)*vertices[a][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][2]+(4*s+3*d)*(2*s+3*d)*vertices[b][2]+s*(4*s+3*d)*vertices[a][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[dl][2])/(18*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][0]+(4*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(4*s+3*d)*vertices[dl][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][1]+(4*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(4*s+3*d)*vertices[dl][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[b][2]+(4*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(4*s+3*d)*vertices[dl][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[c][0]+(2*s+3*d)*vertices[b][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][1]+(2*s+3*d)*vertices[b][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][2]+(2*s+3*d)*vertices[b][2])/(6*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[c][0]+s*vertices[b][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][1]+s*vertices[b][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][2]+s*vertices[b][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[b][0]+s*s*vertices[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[b][1]+s*s*vertices[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[b][2]+s*s*vertices[a][2])/(9*(s+d)*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(2*s+3*d)*verticesInit[a][0]+s*(2*s+3*d)*verticesInit[c][0]+s*s*verticesInit[dl][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(2*s+3*d)*verticesInit[a][1]+s*(2*s+3*d)*verticesInit[c][1]+s*s*verticesInit[dl][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(2*s+3*d)*verticesInit[a][2]+s*(2*s+3*d)*verticesInit[c][2]+s*s*verticesInit[dl][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[b][0]+s*verticesInit[c][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][1]+s*verticesInit[c][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[b][2]+s*verticesInit[c][2])/(3*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[b][0]+(2*s+3*d)*verticesInit[c][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][1]+(2*s+3*d)*verticesInit[c][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[b][2]+(2*s+3*d)*verticesInit[c][2])/(6*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][0]+s*(4*s+3*d)*verticesInit[a][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][1]+s*(4*s+3*d)*verticesInit[a][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[b][2]+s*(4*s+3*d)*verticesInit[a][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[dl][2])/(18*(s+d)*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(4*s+3*d)*verticesInit[dl][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(4*s+3*d)*verticesInit[dl][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[b][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(4*s+3*d)*verticesInit[dl][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[c][0]+(2*s+3*d)*verticesInit[b][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][1]+(2*s+3*d)*verticesInit[b][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][2]+(2*s+3*d)*verticesInit[b][2])/(6*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[c][0]+s*verticesInit[b][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][1]+s*verticesInit[b][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][2]+s*verticesInit[b][2])/(3*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[b][0]+s*s*verticesInit[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[b][1]+s*s*verticesInit[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[b][2]+s*s*verticesInit[a][2])/(9*(s+d)*(s+d))); glEnd(); } if (rflag==a || (rflag==4&&(a==1||a==2)) || (rflag==5&&(a==3||a==7)) || (rflag==1&&(a==5)) || (rflag==3&&(a==5)) || (rflag==2&&(a==4))) { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[a][0]+s*s*vertices[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[a][1]+s*s*vertices[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[a][2]+s*s*vertices[b][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][0]+(4*s+3*d)*(2*s+3*d)*vertices[dl][0]+s*(4*s+3*d)*vertices[a][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][1]+(4*s+3*d)*(2*s+3*d)*vertices[dl][1]+s*(4*s+3*d)*vertices[a][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[c][2]+(4*s+3*d)*(2*s+3*d)*vertices[dl][2]+s*(4*s+3*d)*vertices[a][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[dl][0]+(2*s+3*d)*vertices[c][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][1]+(2*s+3*d)*vertices[c][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[dl][2]+(2*s+3*d)*vertices[c][2])/(6*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[dl][0]+s*vertices[c][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][1]+s*vertices[c][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[dl][2]+s*vertices[c][2])/(3*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][0]+(4*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(4*s+3*d)*vertices[b][0]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][1]+(4*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(4*s+3*d)*vertices[b][1]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*vertices[dl][2]+(4*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(4*s+3*d)*vertices[b][2]+((s+d)*6*s-s*(4*s+3*d))*vertices[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*vertices[c][0]+s*(2*s+3*d)*vertices[dl][0]+s*(2*s+3*d)*vertices[b][0]+s*s*vertices[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][1]+s*(2*s+3*d)*vertices[dl][1]+s*(2*s+3*d)*vertices[b][1]+s*s*vertices[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*vertices[c][2]+s*(2*s+3*d)*vertices[dl][2]+s*(2*s+3*d)*vertices[b][2]+s*s*vertices[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*vertices[c][0]+s*vertices[dl][0])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][1]+s*vertices[dl][1])/(3*(s+d)), (float)((2*s+3*d)*vertices[c][2]+s*vertices[dl][2])/(3*(s+d))); glVertex3f((float)((4*s+3*d)*vertices[c][0]+(2*s+3*d)*vertices[dl][0])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][1]+(2*s+3*d)*vertices[dl][1])/(6*(s+d)), (float)((4*s+3*d)*vertices[c][2]+(2*s+3*d)*vertices[dl][2])/(6*(s+d))); glEnd(); } else { glBegin(GL_POLYGON); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[a][0]+s*s*verticesInit[b][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[a][1]+s*s*verticesInit[b][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[a][2]+s*s*verticesInit[b][2])/(9*(s+d)*(s+d))); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][0]+s*(4*s+3*d)*verticesInit[a][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][1]+s*(4*s+3*d)*verticesInit[a][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[c][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[dl][2]+s*(4*s+3*d)*verticesInit[a][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[b][2])/(18*(s+d)*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[dl][0]+(2*s+3*d)*verticesInit[c][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][1]+(2*s+3*d)*verticesInit[c][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[dl][2]+(2*s+3*d)*verticesInit[c][2])/(6*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[dl][0]+s*verticesInit[c][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][1]+s*verticesInit[c][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[dl][2]+s*verticesInit[c][2])/(3*(s+d))); glEnd(); glBegin(GL_POLYGON); glVertex3f((float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][0]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(4*s+3*d)*verticesInit[b][0]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][0])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][1]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(4*s+3*d)*verticesInit[b][1]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][1])/(18*(s+d)*(s+d)), (float)(((s+d)*9*d+(4*s+3*d)*s)*verticesInit[dl][2]+(4*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(4*s+3*d)*verticesInit[b][2]+((s+d)*6*s-s*(4*s+3*d))*verticesInit[a][2])/(18*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][0]+s*(2*s+3*d)*verticesInit[dl][0]+s*(2*s+3*d)*verticesInit[b][0]+s*s*verticesInit[a][0])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][1]+s*(2*s+3*d)*verticesInit[dl][1]+s*(2*s+3*d)*verticesInit[b][1]+s*s*verticesInit[a][1])/(9*(s+d)*(s+d)), (float)((2*s+3*d)*(2*s+3*d)*verticesInit[c][2]+s*(2*s+3*d)*verticesInit[dl][2]+s*(2*s+3*d)*verticesInit[b][2]+s*s*verticesInit[a][2])/(9*(s+d)*(s+d))); glVertex3f((float)((2*s+3*d)*verticesInit[c][0]+s*verticesInit[dl][0])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][1]+s*verticesInit[dl][1])/(3*(s+d)), (float)((2*s+3*d)*verticesInit[c][2]+s*verticesInit[dl][2])/(3*(s+d))); glVertex3f((float)((4*s+3*d)*verticesInit[c][0]+(2*s+3*d)*verticesInit[dl][0])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][1]+(2*s+3*d)*verticesInit[dl][1])/(6*(s+d)), (float)((4*s+3*d)*verticesInit[c][2]+(2*s+3*d)*verticesInit[dl][2])/(6*(s+d))); glEnd(); } } void colorcube(GLenum mode) { polygon(3,2,1,0, mode); polygon(2,3,7,6, mode); polygon(7,3,0,4, mode); polygon(1,2,6,5, mode); polygon(4,5,6,7, mode); polygon(5,4,0,1, mode); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Update viewer position in modelview matrix */ glLoadIdentity(); gluLookAt(viewer[0],viewer[1],viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // glMatrixMode(GL_MODELVIEW); // glLoadIdentity(); /* rotate cube */ // glTranslatef(-viewer[0],-viewer[1],-viewer[2]); glRotatef(theta[1], 0.0, 1.0, 0.0); glRotatef(theta[0], 1.0, 0.0, 0.0); colorcube(GL_RENDER); glFlush(); glutSwapBuffers(); } void mouse(int x, int y) { static int t=0, xp, yp; if(gbtn==GLUT_LEFT_BUTTON && gstate == GLUT_DOWN) { if (t==0) { xp=x; yp=y; t=1; return; } else { theta[0]+=(y-yp); while (theta[0]>=360) theta[0]-=360; while (theta[0]<0) theta[0]+=360; theta[1]+=(x-xp); while (theta[1]>=360) theta[1]-=360; while (theta[1]<0) theta[1]+=360; xp=x; yp=y; display(); return; } } else if(gbtn==GLUT_LEFT_BUTTON && gstate == GLUT_UP) { t = 0; return; } display(); } void mouseClick(int btn, int state, int x, int y){ gbtn=btn; gstate=state; } void myReshape(int w, int h) { glViewport(0, 0, w, h); ww=w;wh=h; /* Use a perspective view */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glFrustum(-2.0, 2.0, -2.0 * (GLfloat) h/ (GLfloat) w, 2.0* (GLfloat) h / (GLfloat) w, 2.0, 20.0); else glFrustum(-2.0, 2.0, -2.0* (GLfloat) w/ (GLfloat) h, 2.0* (GLfloat) w/ (GLfloat) h, 2.0, 20.0); glMatrixMode(GL_MODELVIEW); } void rotate1D(int flag, int v1, int v2, int v3, int v4) { int i, j, vr[4]; float center[3], axis[3], temp[3]; float s = sin(flag*0.314159265359/180); float c = cos(flag*0.314159265359/180); float k = 1 - c; vr[0]=v1; vr[1]=v2; vr[2]=v3; vr[3]=v4; center[0] = ((verticesInit[v1][0]+verticesInit[v2][0])/2 + (verticesInit[v3][0]+verticesInit[v4][0])/2)/2; center[1] = ((verticesInit[v1][1]+verticesInit[v2][1])/2 + (verticesInit[v3][1]+verticesInit[v4][1])/2)/2; center[2] = ((verticesInit[v1][2]+verticesInit[v2][2])/2 + (verticesInit[v3][2]+verticesInit[v4][2])/2)/2; axis[0] = (verticesInit[v2][1]-verticesInit[v1][1])*(verticesInit[v4][2]-verticesInit[v2][2])-(verticesInit[v2][2]-verticesInit[v1][2])*(verticesInit[v4][1]-verticesInit[v2][1]); axis[1] = (verticesInit[v2][2]-verticesInit[v1][2])*(verticesInit[v4][0]-verticesInit[v2][0])-(verticesInit[v2][0]-verticesInit[v1][0])*(verticesInit[v4][2]-verticesInit[v2][2]); axis[2] = (verticesInit[v2][0]-verticesInit[v1][0])*(verticesInit[v4][1]-verticesInit[v2][1])-(verticesInit[v2][1]-verticesInit[v1][1])*(verticesInit[v4][0]-verticesInit[v2][0]); axis[0] += center[0]; axis[1] += center[1]; axis[2] += center[2]; for (i=0; i<4; i++) { for (j=0; j<3; j++) temp[j] = vertices[vr[i]][j]; vertices[vr[i]][0] = (axis[0]*axis[0]*k+c)*temp[0] + (axis[0]*axis[1]*k-axis[2]*s)*temp[1] + (axis[0]*axis[2]*k+axis[1]*s)*temp[2]; vertices[vr[i]][1] = (axis[0]*axis[1]*k+axis[2]*s)*temp[0] + (axis[1]*axis[1]*k+c)*temp[1] + (axis[1]*axis[2]*k-axis[0]*s)*temp[2]; vertices[vr[i]][2] = (axis[0]*axis[2]*k-axis[1]*s)*temp[0] + (axis[1]*axis[2]*k+axis[0]*s)*temp[1] + (axis[2]*axis[2]*k+c)*temp[2]; } } void equateVertices(void) { int i, j; for (i=0;i<8; i++) for (j=0; j<3; j++) vertices[i][j] = verticesInit[i][j]; } void delay(void) { int j; for (j=1;j<20000000;j++); } void rotateFaceVisual (int flag, int v1, int v2, int v3, int v4) { int i; for (i=1; i<=180;i++) { rotate1D(flag,v1,v2,v3,v4); delay(); display(); } } void rotate_menu(int id) { switch(id) { case 1: rflag = 4; rotateFaceVisual(-1,4,5,6,7); rotateFace(5,2,1,0,7,0,5,6,2,6,7,8,1,6,7,8); rotateFacade(4,0); break; case 2: rflag = 4; rotateFaceVisual(1,4,5,6,7); rotateFace(1,6,7,8,2,6,7,8,7,0,5,6,5,2,1,0); rotateFacade(4,1); break; case 3: rflag = 5; rotateFaceVisual(-1,5,4,0,1); rotateFace(3,6,7,8,7,6,7,8,4,2,1,0,1,0,5,6); rotateFacade(5,0); break; case 4: rflag = 5; rotateFaceVisual(1,5,4,0,1); rotateFace(1,0,5,6,4,2,1,0,7,6,7,8,3,6,7,8); rotateFacade(5,1); break; case 5: rflag = 1; rotateFaceVisual(-1,1,2,6,5); rotateFace(5,6,5,0,4,2,3,8,2,6,5,0,3,2,3,8); rotateFacade(1,0); break; case 6: rflag = 1; rotateFaceVisual(1,1,2,6,5); rotateFace(3,2,3,8,2,6,5,0,4,2,3,8,5,6,5,0); rotateFacade(1,1); break; case 7: rflag = 3; rotateFaceVisual(-1,3,2,1,0); rotateFace(1,0,1,2,2,0,1,2,7,2,3,8,5,8,7,6); rotateFacade(3,0); break; case 8: rflag = 3; rotateFaceVisual(1,3,2,1,0); rotateFace(5,8,7,6,7,2,3,8,2,0,1,2,1,0,1,2); rotateFacade(3,1); break; case 9: rflag = 7; rotateFaceVisual(-1,7,3,0,4); rotateFace(3,0,5,6,2,8,3,2,4,0,5,6,5,8,3,2); rotateFacade(7,0); break; case 10: rflag = 7; rotateFaceVisual(1,7,3,0,4); rotateFace(5,8,3,2,4,0,5,6,2,8,3,2,3,0,5,6); rotateFacade(7,1); break; case 11: rflag = 2; rotateFaceVisual(-1,2,3,7,6); rotateFace(1,2,3,8,4,8,7,6,7,0,1,2,3,0,1,2); rotateFacade(2,0); break; case 12: rflag = 2; rotateFaceVisual(1,2,3,7,6); rotateFace(3,0,1,2,7,0,1,2,4,8,7,6,1,2,3,8); rotateFacade(2,1); break; } rflag = 0; equateVertices(); glutPostRedisplay(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(ww, wh); glutCreateWindow("Magic Cube"); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMotionFunc(mouse); glutMouseFunc(mouseClick); glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glutCreateMenu(rotate_menu); glutAddMenuEntry("Rotate White Clockwise", 1); glutAddMenuEntry("Rotate White CounterClockwise", 2); glutAddMenuEntry("Rotate Blue Clockwise", 3); glutAddMenuEntry("Rotate Blue CounterClockwise", 4); glutAddMenuEntry("Rotate Orange Clockwise", 5); glutAddMenuEntry("Rotate Orange CounterClockwise", 6); glutAddMenuEntry("Rotate Yellow Clockwise", 7); glutAddMenuEntry("Rotate Yellow CounterClockwise", 8); glutAddMenuEntry("Rotate Red Clockwise", 9); glutAddMenuEntry("Rotate Red CounterClockwise", 10); glutAddMenuEntry("Rotate Green Clockwise", 11); glutAddMenuEntry("Rotate Green CounterClockwise", 12); glutAttachMenu(GLUT_RIGHT_BUTTON); glutMainLoop(); return 0; }