Как заполнить плоскость списком меньших квадратов, используя вложенные циклы в OpenGL?

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

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

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();
}

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


person antiopengl    schedule 18.10.2011    source источник


Ответы (1)


Вычислите размер квадрата и разделите его на более мелкие части. Что-то вроде этого (не проверено):

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();
}
person user786653    schedule 18.10.2011
comment
Количество подразделений по осям x и y. То есть, если вы установите xtiles на 4 и ytiles на 8, вы получите 32 квадрата. - person user786653; 18.10.2011