openGL glTranslated одна фигура в 8 разных местах - PullRequest
0 голосов
/ 27 октября 2018

Это изображение, которое я хочу получить

Это изображение, которое у меня было

void display(void){
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    int j=120;

    for(int i=0;i<1;i++){

        glPushMatrix();
        if(i%2==0){
            glTranslated(-i*j,i*j,0);
        }else{
            glTranslated(i*j,i*j,0);
        }
        glScaled(1,1,1);
        draw_ring();
        glPopMatrix();
        glFlush();
    }
}    

Я хочу, чтобы мое изображение было переведено в эти 8 различных позиций, как изображение, которое я показываю, мне нужна помощь с изображением Переведенная часть, для которой Переведено изображение в нужные места.Кто-нибудь может мне помочь и направить меня в правильном направлении, спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Самый простой способ сделать то, что вы хотите, это использовать 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...