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