Быстрое рисование многих одинаковых объектов в OpenGL

Итак, я работаю над игрой, и мне нужно нарисовать много одного и того же объекта. Та же форма, тот же размер, тот же цвет, только в разных местах.

Сейчас моя установка такая.

У меня есть класс Renderer , где объект, который нужно рисовать на экране, может вызывать static void addVertex (float x, float y, float z); который будет хранить вершину в std :: vector . Когда все закончили рисовать static void draw (); вызывается в Renderer , где все помещается в VBO и выводится на экран.

draw выглядит так:

void Renderer::draw() {
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, _quadID);
    glBufferSubDataARB(GL_QUADS, 0, _vertexBuffer.dataSize(), _vertexBuffer.toArray());

    glColorPointer(4, GL_FLOAT, 0, _colorBuffer.toArray());

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, _vertexBuffer.toArray());

    glDrawArrays(GL_QUADS, 0, (_vertexBuffer.size() / 3));
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

    glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

    _vertexBuffer.clear();
    _colorBuffer.clear();
}

Где _vertexBuffer и _colorBuffer относятся к классу template Buffer , который более или менее управляем std :: vector для моих целей.

С такой настройкой я могу вывести на экран около 300 объектов, прежде чем я начну замедляться. Прямо сейчас все - GL_QUAD. Имейте в виду, что я немного новичок в OpenGL, если вышесказанное меня смущает, извините.

Как я могу улучшить это, чтобы учесть похожие многоугольники?

13
задан SpaceFace 19 February 2012 в 19:18
поделиться