Да, че путаться. Ты же сам понимаешь, что с точки зрения ханойской башни, пока диск не положишь, его и не вынешь. Конечно, второй pop бесмысленая операция. Дисков уже нет, выталкивать из сетка нечего. Скорее всего второй pop возвратиться с ошибкой.
И я не гуру OGL. Гуру Боресков (
http://steps3d.narod.ru/me.html). Я переводил уроки NeHe на русский...
Сложного примера у меня нет. Вот простой пример:
Код:
int build_quads_cube ( SPointPolygon_OGL * p/*24*/, SVector3f * colors_points/*8*/, SVector3f * center_point, float size ) // 24 points!!! 8 vertex!!!
{
ulong_t i, j, n_vertex, k;
static SVector3f points_cube[8]=
{
{-1.0f, 1.0f, 1.0f}, //left,top,front
{1.0f, 1.0f, 1.0f}, //right,top,front
{1.0f, 1.0f,-1.0f}, //right,top,back
{-1.0f, 1.0f,-1.0f}, //left, top,back
{-1.0f,-1.0f, 1.0f}, //left,bottom,front
{1.0f, -1.0f, 1.0f}, //right,bottom,front
{1.0f, -1.0f,-1.0f}, //right,bottom,back
{-1.0f,-1.0f,-1.0f} //left,bottom,back
};
// anti-clockwise order
static byte_t face_cube[6][4]=
{
{0,1,2,3}, //top
{0,3,7,4}, //left
{3,2,6,7}, //back
{2,1,5,6}, //right
{0,4,5,1}, //front
{4,7,6,5}, //bottom
};
if ( p==0 || colors_points==0 )
return IS_ERROR;
for ( i=0, k=0; i<6; i++ )
for ( j=0; j<4; j++ ) {
n_vertex = face_cube[i][j];
p[k].x = points_cube[n_vertex].x * size + center_point->x;
p[k].y = points_cube[n_vertex].y * size + center_point->y;
p[k].z = points_cube[n_vertex].z * size + center_point->z;
p[k].r = colors_points[n_vertex].r;
p[k].g = colors_points[n_vertex].g;
p[k].b = colors_points[n_vertex].b;
k++;
}
return IS_OK;
}
build_quads_cube (points_polygons[0],color_points_cube,¢er_point,2.0);
build_quads_cube (points_polygons[1],color_points_cube_tmp,¢er_point,2.0);
build_quads_cube (points_polygons[2],color_points_cube_tmp,¢er_point,2.0);
build_quads_cube (points_polygons[3],color_points_cube_tmp,¢er_point,2.0);
build_quads_cube (points_polygons[4],color_points_cube_tmp,¢er_point,2.0);
glRotatef(angle[1],0.0,1.0,0.0);
polygons_draw.init(&cfg_polygons,count_points[0],points_polygons[0]);
glPushMatrix();
glScalef(5.0,0.1,5.0);
polygons_draw.draw();
glPopMatrix();
polygons_draw.init(&cfg_polygons,count_points[1],points_polygons[1]);
glPushMatrix();
glTranslatef(-2.0,3.0,pos[1]);
glRotatef(angle[1],1.0,0.0,0.0);
glPushMatrix();
glScalef(0.1,0.8,0.8);
polygons_draw.draw();
glPopMatrix();
polygons_draw.init(&cfg_polygons,count_points[4],points_polygons[4]);
glTranslatef(-4.0,0.0,0.0);
glRotatef(angle[4],0.0,1.0,0.0);
glPushMatrix();
glScalef(0.8,0.1,0.8);
polygons_draw.draw();
glPopMatrix();
glPopMatrix();
polygons_draw.init(&cfg_polygons,count_points[2],points_polygons[2]);
glPushMatrix();
glTranslatef(2.0,3.0,pos[2]);
glRotatef(angle[2],1.0,0.0,0.0);
glPushMatrix();
glScalef(0.1,0.8,0.8);
polygons_draw.draw();
glPopMatrix();
polygons_draw.init(&cfg_polygons,count_points[3],points_polygons[3]);
glTranslatef(4.0,0.0,0.0);
glRotatef(angle[3],0.0,1.0,0.0);
glPushMatrix();
glScalef(0.8,0.1,0.8);
polygons_draw.draw();
glPopMatrix();
glPopMatrix();