Итак, я работаю над игрой, и мне нужно нарисовать много одного и того же объекта. Та же форма, тот же размер, тот же цвет, только в разных местах.
Сейчас моя установка такая.
У меня есть класс 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
, который более или менее управляем std :: vector
для моих целей.
С такой настройкой я могу вывести на экран около 300 объектов, прежде чем я начну замедляться. Прямо сейчас все - GL_QUAD. Имейте в виду, что я немного новичок в OpenGL, если вышесказанное меня смущает, извините.
Как я могу улучшить это, чтобы учесть похожие многоугольники?