2010-07-30 2 views
5

Итак, в приложении рендеринга OpenGL обычно лучше создавать и поддерживать буфер вершин на протяжении всего срока службы приложения и просто менять данные каждый кадр с помощью glBufferData или лучше просто удалить VBO и воссоздать его каждый кадр?Лучше создавать новые VBO или просто менять данные? (OpenGL)

Intuition говорит мне, что лучше поменять данные, но несколько примеров программ, которые я видел, делают последнее, поэтому я немного смущен.

Я читал технический документ Nvidia на VBOs, но поскольку я новичок в opengl, это не имело большого смысла.

Заранее спасибо за советы и

ответ

5

Поскольку вы генерируя новый набор данных каждого кадра в документации, кажется, указывает, что GL_STREAM_DRAW это правильный путь идти о вещах.

0

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

Таким образом, идеальный случай состоит в том, чтобы поместить все необходимые данные визуализации в VBOs один раз, а затем манипулировать ими только с помощью функций OpenGL, таких как преобразование матрицы или шейдеров.

Так вы бы, например. поместите координаты и координаты пространства в пространстве Mesh в VBOs и никогда не коснитесь их снова; вы должны использовать матрицу модели, функции освещения и шейдеры для их рендеринга.

Вы можете сделать больше, чтобы оптимизировать использование VBO, но это основы, как я их понял.

Найдите несколько полезных советов и более подробную информацию здесь: How do I use OpenGL 3.x VBOs to render a dynamic world?

Смежные вопросы