void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ) { int i, j ; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSolidSierpinskiSponge" ); if ( num_levels == 0 ) { glBegin ( GL_TRIANGLES ) ; for ( i = 0 ; i < NUM_TETR_FACES ; i++ ) { glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ; for ( j = 0; j < 3; j++ ) { double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ; double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ; double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ; glVertex3d ( x, y, z ) ; } } glEnd () ; } else if ( num_levels > 0 ) { GLdouble local_offset[3] ; /* Use a local variable to avoid buildup of roundoff errors */ num_levels -- ; scale /= 2.0 ; for ( i = 0 ; i < NUM_TETR_FACES ; i++ ) { local_offset[0] = offset[0] + scale * tet_r[i][0] ; local_offset[1] = offset[1] + scale * tet_r[i][1] ; local_offset[2] = offset[2] + scale * tet_r[i][2] ; glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ; } } }
static void drawSolidSierpinskiSponge(void) { glutSolidSierpinskiSponge (depth, offset, orad);} /* orad doubles as size input */
static void drawSolidSierpinskiSponge(void) { glutSolidSierpinskiSponge (depth, offset, 1); }