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

📄 shapes.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_LINE_LOOP ) ;  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_LINE_LOOP ) ;  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;  glEnd () ;  glBegin ( GL_LINE_LOOP ) ;  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_LINE_LOOP ) ;  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_LINE_LOOP ) ;  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;  glEnd () ;}/* * */void GLUTAPIENTRY glutSolidDodecahedron( void ){  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of   * of a cube.  The coordinates of the points are:   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )   * where x = 0.61803398875 and z = 1.61803398875.   */  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;  glEnd () ;  glBegin ( GL_POLYGON ) ;  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;  glEnd () ;}/* * */void GLUTAPIENTRY glutWireOctahedron( void ){#define RADIUS    1.0f  glBegin( GL_LINE_LOOP );    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );  glEnd();#undef RADIUS}/* * */void GLUTAPIENTRY glutSolidOctahedron( void ){#define RADIUS    1.0f  glBegin( GL_TRIANGLES );    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );  glEnd();#undef RADIUS}/* * */void GLUTAPIENTRY glutWireTetrahedron( void ){  /* Magic Numbers:  r0 = ( 1, 0, 0 )   *                 r1 = ( -1/3, 2 sqrt(2) / 3, 0 )   *                 r2 = ( -1/3, -sqrt(2) / 3, sqrt(6) / 3 )   *                 r3 = ( -1/3, -sqrt(2) / 3, -sqrt(6) / 3 )   * |r0| = |r1| = |r2| = |r3| = 1   * Distance between any two points is 2 sqrt(6) / 3   *   * Normals:  The unit normals are simply the negative of the coordinates of the point not on the surface.   */  double r0[3] = {             1.0,             0.0,             0.0 } ;  double r1[3] = { -0.333333333333,  0.942809041582,             0.0 } ;  double r2[3] = { -0.333333333333, -0.471404520791,  0.816496580928 } ;  double r3[3] = { -0.333333333333, -0.471404520791, -0.816496580928 } ;  glBegin( GL_LINE_LOOP ) ;    glNormal3d (           -1.0,             0.0,             0.0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r2 ) ;    glNormal3d ( 0.333333333333, -0.942809041582,             0.0 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r2 ) ; glVertex3dv ( r3 ) ;    glNormal3d ( 0.333333333333,  0.471404520791, -0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r1 ) ;    glNormal3d ( 0.333333333333,  0.471404520791,  0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r2 ) ;  glEnd() ;}/* * */void GLUTAPIENTRY glutSolidTetrahedron( void ){  /* Magic Numbers:  r0 = ( 1, 0, 0 )   *                 r1 = ( -1/3, 2 sqrt(2) / 3, 0 )   *                 r2 = ( -1/3, -sqrt(2) / 3, sqrt(6) / 3 )   *                 r3 = ( -1/3, -sqrt(2) / 3, -sqrt(6) / 3 )   * |r0| = |r1| = |r2| = |r3| = 1   * Distance between any two points is 2 sqrt(6) / 3   *   * Normals:  The unit normals are simply the negative of the coordinates of the point not on the surface.   */  double r0[3] = {             1.0,             0.0,             0.0 } ;  double r1[3] = { -0.333333333333,  0.942809041582,             0.0 } ;  double r2[3] = { -0.333333333333, -0.471404520791,  0.816496580928 } ;  double r3[3] = { -0.333333333333, -0.471404520791, -0.816496580928 } ;  glBegin( GL_TRIANGLES ) ;    glNormal3d (           -1.0,             0.0,             0.0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r2 ) ;    glNormal3d ( 0.333333333333, -0.942809041582,             0.0 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r2 ) ; glVertex3dv ( r3 ) ;    glNormal3d ( 0.333333333333,  0.471404520791, -0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r3 ) ; glVertex3dv ( r1 ) ;    glNormal3d ( 0.333333333333,  0.471404520791,  0.816496580928 ) ; glVertex3dv ( r0 ) ; glVertex3dv ( r1 ) ; glVertex3dv ( r2 ) ;  glEnd() ;}/* * */double icos_r[12][3] = { { 1.0, 0.0, 0.0 },  {  0.447213595500,  0.894427191000, 0.0 }, {  0.447213595500,  0.276393202252, 0.850650808354 }, {  0.447213595500, -0.723606797748, 0.525731112119 }, {  0.447213595500, -0.723606797748, -0.525731112119 }, {  0.447213595500,  0.276393202252, -0.850650808354 },  { -0.447213595500, -0.894427191000, 0.0 }, { -0.447213595500, -0.276393202252, 0.850650808354 }, { -0.447213595500,  0.723606797748, 0.525731112119 }, { -0.447213595500,  0.723606797748, -0.525731112119 }, { -0.447213595500, -0.276393202252, -0.850650808354 },  { -1.0, 0.0, 0.0 } } ;int icos_v [20][3] = { { 0, 1, 2 }, { 0, 2, 3 }, { 0, 3, 4 }, { 0, 4, 5 }, { 0, 5, 1 },                       { 1, 8, 2 }, { 2, 7, 3 }, { 3, 6, 4 }, { 4, 10, 5 }, { 5, 9, 1 },                       { 1, 9, 8 }, { 2, 8, 7 }, { 3, 7, 6 }, { 4, 6, 10 }, { 5, 10, 9 },                       { 11, 9, 10 }, { 11, 8, 9 }, { 11, 7, 8 }, { 11, 6, 7 }, { 11, 10, 6 } } ;void GLUTAPIENTRY glutWireIcosahedron( void ){  int i ;  for ( i = 0; i < 20; i++ )  {    double normal[3] ;    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;    glBegin ( GL_LINE_LOOP ) ;      glNormal3dv ( normal ) ;      glVertex3dv ( icos_r[icos_v[i][0]] ) ;      glVertex3dv ( icos_r[icos_v[i][1]] ) ;      glVertex3dv ( icos_r[icos_v[i][2]] ) ;    glEnd () ;  }}/* * */void GLUTAPIENTRY glutSolidIcosahedron( void ){  int i ;  glBegin ( GL_TRIANGLES ) ;  for ( i = 0; i < 20; i++ )  {    double normal[3] ;    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;      glNormal3dv ( normal ) ;      glVertex3dv ( icos_r[icos_v[i][0]] ) ;      glVertex3dv ( icos_r[icos_v[i][1]] ) ;      glVertex3dv ( icos_r[icos_v[i][2]] ) ;  }  glEnd () ;}/* * */double rdod_r[14][3] = { { 0.0, 0.0, 1.0 },  {  0.707106781187,  0.000000000000,  0.5 }, {  0.000000000000,  0.707106781187,  0.5 }, { -0.707106781187,  0.000000000000,  0.5 }, {  0.000000000000, -0.707106781187,  0.5 },  {  0.707106781187,  0.707106781187,  0.0 }, { -0.707106781187,  0.707106781187,  0.0 }, { -0.707106781187, -0.707106781187,  0.0 }, {  0.707106781187, -0.707106781187,  0.0 },  {  0.707106781187,  0.000000000000, -0.5 }, {  0.000000000000,  0.707106781187, -0.5 }, { -0.707106781187,  0.000000000000, -0.5 }, {  0.000000000000, -0.707106781187, -0.5 },  {  0.0, 0.0, -1.0 } } ;int rdod_v [12][4] = { { 0,  1,  5,  2 }, { 0,  2,  6,  3 }, { 0,  3,  7,  4 }, { 0,  4,  8, 1 },                       { 5, 10,  6,  2 }, { 6, 11,  7,  3 }, { 7, 12,  8,  4 }, { 8,  9,  5, 1 },                       { 5,  9, 13, 10 }, { 6, 10, 13, 11 }, { 7, 11, 13, 12 }, { 8, 12, 13, 9 } } ;double rdod_n[12][3] = {  {  0.353553390594,  0.353553390594,  0.5 }, { -0.353553390594,  0.353553390594,  0.5 }, { -0.353553390594, -0.353553390594,  0.5 }, {  0.353553390594, -0.353553390594,  0.5 },  {  0.000000000000,  1.000000000000,  0.0 }, { -1.000000000000,  0.000000000000,  0.0 }, {  0.000000000000, -1.000000000000,  0.0 }, {  1.000000000000,  0.000000000000,  0.0 },  {  0.353553390594,  0.353553390594, -0.5 }, { -0.353553390594,  0.353553390594, -0.5 }, { -0.353553390594, -0.353553390594, -0.5 }, {  0.353553390594, -0.353553390594, -0.5 }  } ;void GLUTAPIENTRY glutWireRhombicDodecahedron( void ){  int i ;  for ( i = 0; i < 12; i++ )  {    glBegin ( GL_LINE_LOOP ) ;      glNormal3dv ( rdod_n[i] ) ;      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;    glEnd () ;  }}/* * */void GLUTAPIENTRY glutSolidRhombicDodecahedron( void ){  int i ;  glBegin ( GL_QUADS ) ;  for ( i = 0; i < 12; i++ )  {      glNormal3dv ( rdod_n[i] ) ;      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;  }  glEnd () ;}#define NUM_FACES     4static GLdouble tetrahedron_v[4][3] =  /* Vertices */{  { -0.5, -0.288675134595, -0.144337567297 },  {  0.5, -0.288675134595, -0.144337567297 },  {  0.0,  0.577350269189, -0.144337567297 },  {  0.0,  0.0,             0.672159013631 }} ;static GLint tetrahedron_i[4][3] =  /* Vertex indices */{  { 0, 1, 2 }, { 0, 2, 3 }, { 0, 3, 1 }, { 1, 3, 2 }} ;static GLdouble tetrahedron_n[4][3] =  /* Normals */{  {  0.0,             0.0,            -1.0 },  { -0.816496580928,  0.471404520791,  0.333333333333 },  {  0.0,            -0.942809041582,  0.333333333333 },  {  0.816496580928,  0.471404520791,  0.333333333333 }} ;void GLUTAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ){  int i, j ;  if ( num_levels == 0 )  {    for ( i = 0 ; i < NUM_FACES ; i++ )    {      glBegin ( GL_LINE_LOOP ) ;      glNormal3dv ( tetrahedron_n[i] ) ;      for ( j = 0; j < 3; j++ )      {        double x = offset[0] + scale * tetrahedron_v[tetrahedron_i[i][j]][0] ;        double y = offset[1] + scale * tetrahedron_v[tetrahedron_i[i][j]][1] ;        double z = offset[2] + scale * tetrahedron_v[tetrahedron_i[i][j]][2] ;        glVertex3d ( x, y, z ) ;      }      glEnd () ;    }  }  else  {    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */    num_levels -- ;    scale /= 2.0 ;    local_offset[0] = offset[0] + scale * tetrahedron_v[0][0] ;    local_offset[1] = offset[1] + scale * tetrahedron_v[0][1] ;    local_offset[2] = offset[2] + scale * tetrahedron_v[0][2] ;    glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;    local_offset[0] += scale ;    glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;    local_offset[0] -= 0.5            * scale ;    local_offset[1] += 0.866025403784 * scale ;    glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;    local_offset[1] -= 0.577350269189 * scale ;    local_offset[2] += 0.816496580928 * scale ;    glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;  }}void GLUTAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ){  int i, j ;  if ( num_levels == 0 )  {    glBegin ( GL_TRIANGLES ) ;    for ( i = 0 ; i < NUM_FACES ; i++ )    {      glNormal3dv ( tetrahedron_n[i] ) ;      for ( j = 0; j < 3; j++ )      {        double x = offset[0] + scale * tetrahedron_v[tetrahedron_i[i][j]][0] ;        double y = offset[1] + scale * tetrahedron_v[tetrahedron_i[i][j]][1] ;        double z = offset[2] + scale * tetrahedron_v[tetrahedron_i[i][j]][2] ;        glVertex3d ( x, y, z ) ;      }    }    glEnd () ;  }  else  {    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */    num_levels -- ;    scale /= 2.0 ;    local_offset[0] = offset[0] + scale * tetrahedron_v[0][0] ;    local_offset[1] = offset[1] + scale * tetrahedron_v[0][1] ;    local_offset[2] = offset[2] + scale * tetrahedron_v[0][2] ;    glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;    local_offset[0] += scale ;    glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;    local_offset[0] -= 0.5            * scale ;    local_offset[1] += 0.866025403784 * scale ;    glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;    local_offset[1] -= 0.577350269189 * scale ;    local_offset[2] += 0.816496580928 * scale ;    glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;  }}#undef NUM_FACES/*** END OF FILE ***/

⌨️ 快捷键说明

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