+/* Icosahedron */
+#define ICOSAHEDRON_NUM_VERT 12
+#define ICOSAHEDRON_NUM_FACES 20
+#define ICOSAHEDRON_NUM_VERT_PER_FACE 3
+#define ICOSAHEDRON_VERT_PER_OBJ ICOSAHEDRON_NUM_FACES*ICOSAHEDRON_NUM_VERT_PER_FACE
+#define ICOSAHEDRON_VERT_ELEM_PER_OBJ ICOSAHEDRON_VERT_PER_OBJ*3
+/* Vertex Coordinates */
+static GLdouble icosahedron_v[ICOSAHEDRON_NUM_VERT*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
+};
+/* Normal Vectors:
+ * icosahedron_n[i][0] = ( icosahedron_v[icosahedron_vi[i][1]][1] - icosahedron_v[icosahedron_vi[i][0]][1] ) * ( icosahedron_v[icosahedron_vi[i][2]][2] - icosahedron_v[icosahedron_vi[i][0]][2] ) - ( icosahedron_v[icosahedron_vi[i][1]][2] - icosahedron_v[icosahedron_vi[i][0]][2] ) * ( icosahedron_v[icosahedron_vi[i][2]][1] - icosahedron_v[icosahedron_vi[i][0]][1] ) ;
+ * icosahedron_n[i][1] = ( icosahedron_v[icosahedron_vi[i][1]][2] - icosahedron_v[icosahedron_vi[i][0]][2] ) * ( icosahedron_v[icosahedron_vi[i][2]][0] - icosahedron_v[icosahedron_vi[i][0]][0] ) - ( icosahedron_v[icosahedron_vi[i][1]][0] - icosahedron_v[icosahedron_vi[i][0]][0] ) * ( icosahedron_v[icosahedron_vi[i][2]][2] - icosahedron_v[icosahedron_vi[i][0]][2] ) ;
+ * icosahedron_n[i][2] = ( icosahedron_v[icosahedron_vi[i][1]][0] - icosahedron_v[icosahedron_vi[i][0]][0] ) * ( icosahedron_v[icosahedron_vi[i][2]][1] - icosahedron_v[icosahedron_vi[i][0]][1] ) - ( icosahedron_v[icosahedron_vi[i][1]][1] - icosahedron_v[icosahedron_vi[i][0]][1] ) * ( icosahedron_v[icosahedron_vi[i][2]][0] - icosahedron_v[icosahedron_vi[i][0]][0] ) ;
+*/
+static GLdouble icosahedron_n[ICOSAHEDRON_NUM_FACES*3] =
+{
+ 0.760845213037948, 0.470228201835026, 0.341640786498800,
+ 0.760845213036861, -0.179611190632978, 0.552786404500000,
+ 0.760845213033849, -0.581234022404097, 0,
+ 0.760845213036861, -0.179611190632978, -0.552786404500000,
+ 0.760845213037948, 0.470228201835026, -0.341640786498800,
+ 0.179611190628666, 0.760845213037948, 0.552786404498399,
+ 0.179611190634277, -0.290617011204044, 0.894427191000000,
+ 0.179611190633958, -0.940456403667806, 0,
+ 0.179611190634278, -0.290617011204044, -0.894427191000000,
+ 0.179611190628666, 0.760845213037948, -0.552786404498399,
+ -0.179611190633958, 0.940456403667806, 0,
+ -0.179611190634277, 0.290617011204044, 0.894427191000000,
+ -0.179611190628666, -0.760845213037948, 0.552786404498399,
+ -0.179611190628666, -0.760845213037948, -0.552786404498399,
+ -0.179611190634277, 0.290617011204044, -0.894427191000000,
+ -0.760845213036861, 0.179611190632978, -0.552786404500000,
+ -0.760845213033849, 0.581234022404097, 0,
+ -0.760845213036861, 0.179611190632978, 0.552786404500000,
+ -0.760845213037948, -0.470228201835026, 0.341640786498800,
+ -0.760845213037948, -0.470228201835026, -0.341640786498800,
+};
+
+/* Vertex indices */
+static GLubyte icosahedron_vi[ICOSAHEDRON_VERT_PER_OBJ] =
+{
+ 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
+};
+DECLARE_SHAPE_CACHE(icosahedron,Icosahedron,ICOSAHEDRON);
+