Самый простой способ сделать то, что вы хотите, это использовать 2 вложенных цикла:
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
int rows = 2;
int columns = 4;
double tile_dist = 120.0;
for ( int col = 0; col < columns; ++ col )
{
for (int row = 0; row < rows; ++ row )
{
glPushMatrix();
glTranslated( col * tile_dist, row * tile_dist, 0.0 );
glScaled(1,1,1);
draw_ring();
glPopMatrix();
}
}
glFlush();
}
Если вы хотите нарисовать его одним циклом, то вам нужно вычислить текущую строку и столбец внутри цикла. Плитка должна быть нарисована построчно или колонка за колонкой. Вычислить строку и столбец в зависимости от управляющей переменной (col = i % tile_x
, columns = i / columns
)
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
int columns = 4;
double tile_dist = 120.0;
for ( int i = 0; i < 8; ++ i )
{
int col = i % columns;
int row = i / columns;
glPushMatrix();
glTranslated( col * tile_dist, row * tile_dist, 0.0 );
glScaled(1,1,1);
draw_ring();
glPopMatrix();
}
glFlush();
}