void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ) { int i, j ; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutWireSierpinskiSponge" ); if ( num_levels == 0 ) { for ( i = 0 ; i < NUM_TETR_FACES ; i++ ) { glBegin ( GL_LINE_LOOP ) ; 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] ; glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ; } } }
/* * These one-liners draw particular objects, fetching appropriate * information from the above globals. They are just thin wrappers * for the FreeGLUT objects. */ static void drawSolidTetrahedron(void) { glutSolidTetrahedron (); } static void drawWireTetrahedron(void) { glutWireTetrahedron (); } static void drawSolidCube(void) { glutSolidCube(orad); } /* orad doubles as size input */ static void drawWireCube(void) { glutWireCube(orad); } /* orad doubles as size input */ static void drawSolidOctahedron(void) { glutSolidOctahedron (); } static void drawWireOctahedron(void) { glutWireOctahedron (); } static void drawSolidDodecahedron(void) { glutSolidDodecahedron (); } static void drawWireDodecahedron(void) { glutWireDodecahedron (); } static void drawSolidRhombicDodecahedron(void) { glutSolidRhombicDodecahedron (); } static void drawWireRhombicDodecahedron(void) { glutWireRhombicDodecahedron (); } static void drawSolidIcosahedron(void) { glutSolidIcosahedron (); } static void drawWireIcosahedron(void) { glutWireIcosahedron (); } static void drawSolidSierpinskiSponge(void) { glutSolidSierpinskiSponge (depth, offset, orad);} /* orad doubles as size input */ static void drawWireSierpinskiSponge(void) { glutWireSierpinskiSponge (depth, offset, orad); } /* orad doubles as size input */
static void drawWireSierpinskiSponge(void) { glutWireSierpinskiSponge (depth, offset, 1); }