Как заполнить плоскость списком меньших квадратов, используя вложенные циклы в OpenGL? - PullRequest
0 голосов
/ 18 октября 2011

Я не знаю, каким образом мы можем настроить плоскую поверхность, которая заполнена меньшими квадратами (чтобы я мог улучшить эффект освещения).

Мой код для рисования одного квадрата:

void drawSquare(float x1, float y1, float x2, float y2) {
    glBegin(GL_QUADS);
        glVertex3f(x1, y1, 0.0f); // The bottom left corner  
        glVertex3f(x1, y2, 0.0f); // The top left corner  
        glVertex3f(x2, y2, 0.0f); // The top right corner  
        glVertex3f(x2, y1, 0.0f); // The bottom right corner    
    glEnd();
}

Итак, как мне теперь запустить вложенный цикл, чтобы заполнить поверхность количеством меньших квадратов?Я немного не уверен насчет координат меньших квадратов.

1 Ответ

2 голосов
/ 18 октября 2011

Рассчитайте размер квадрата и разделите его на более мелкие кусочки. Примерно так (не проверено):

void drawSquare(float x1, float y1, float x2, float y2, int xtiles, int ytiles) {
    float tile_width  = (x2 - x1) / xtiles;
    float tile_height = (y2 - y1) / ytiles;
    int x, y;
    glBegin(GL_QUADS);
        for (y = 0; y < ytiles; y++) {
            for (x = 0; x < xtiles; x++) {
                glVertex3f(x1 + x * tile_width, y1 + y * tile_height, 0.0f); // The bottom left corner  
                glVertex3f(x1 + x * tile_width, y1 + (y + 1) * tile_height, 0.0f); // The top left corner  
                glVertex3f(x1 + (x + 1) * tile_width, y1 + (y + 1) * tile_height, 0.0f); // The top right corner  
                glVertex3f(x1 + (x + 1) * tile_width, y1 + y * tile_height, 0.0f); // The bottom right corner    
            }
        }
    glEnd();
}
...