Итак, я работаю над игрой, и мне нужно рисовать много одного и того же объекта. Такая же форма, того же размера, того же цвета, только в разных местах.
Прямо сейчас моя настройка такая.
У меня есть класс Renderer
, где объект, который хочет рисовать на экране, может вызвать static void addVertex(float x, float y, float z);
, который сохранит вершину в std::vector
. Когда все делается, вызывается static void draw();
в Renderer
, где все набивается в VBO и нарисовано на экране.
рисунок выглядит следующим образом:
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 <class T> Buffer
, который является более или менее управляемым std::vector<T>
для моих целей.
С помощью этой настройки я могу получить около 300 вещей на экране, прежде чем я начну замедляться. Сейчас все это GL_QUAD. Имейте в виду, я немного новичок в OpenGL, если выше неловко, извините.
Как я могу улучшить это, чтобы учитывать как многоугольники?