-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 < TETR_NUM_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 < TETR_NUM_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 ) ;
- }
- }
-}
-
-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 < TETR_NUM_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 < TETR_NUM_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 ) ;
- }
- }
-}
-