Итак, я понимаю, как использовать объект буфера вершин, и что он обеспечивает значительное увеличение производительности по сравнению с графиком немедленного режима. Я буду рисовать много 2D-квадов (спрайтов), и я хочу знать, должен ли я создать VBO для каждого из них или создать один VBO для хранения всех данных?Сколько VBO я использую?
ответ
Вам не следует использовать новый VBO для каждого спрайта/квадроцикла. Поэтому положить их в один VBO было бы лучшим решением в вашем случае.
Но в целом я не думаю, что на это можно ответить в одном предложении.
Создание нового VBO для каждого Quad не даст вам реального увеличения производительности. Если вы это сделаете, много времени будет потрачено впустую с помощью glBindBuffer
вызовов для переключения VBOs. Однако, если вы создаете VBOs, которые содержат слишком много данных, вы можете столкнуться с другими проблемами.
Малые О:
- часто легче обращаться в вашем программном коде. Вы можете использовать новый VBO для каждого объекта, который вы визуализируете. Таким образом, вы можете легко управлять своими объектами в своем мире.
- Если VBOs слишком малы (всего несколько треугольников), вы не получите большую пользу. Много времени будет потеряно при переключении буферов (и, возможно переключение шейдеры/текстуры) между буферами
Большие РВО:
- Вы можете вынести тонны объектов с одним
drawArrays()
вызовом для лучшей производительности. - В зависимости от ваших данных возможно, что вы создаете накладные расходы для управления множеством объектов в одном VBO (что, если вы хотите переместить один из этих объектов и повернуть другой объект?).
- Если ОБВ слишком велики ее возможно, что они не могут быть перемещены в VRAM
Следующие ссылки могут помочь вам:
Используйте одно (или небольшое количество) VBO (ов), чтобы удерживать все/большую часть вашей геометрии.
Как правило, чем меньше вызовов API требуется для рендеринга вашей сцены, тем лучше.
Это также зависит от того, что d вы хотите делать с этими спрайтами?
Являются ли они динамическими? Вы хотите изменить только центр квада или, возможно, изменить все четыре точки?
Это важно, потому что если ваши данные являются динамическими, то самым простым способом вам придется переходить с процессора на gpu на каждый кадр. Может быть, вы могли бы выполнить все вычисления на графическом процессоре - например, используя геометрические шейдеры?
Также для очень простых квадрациклов/спрайтов можно использовать GL_POINT_SPRITE. С этим нужно отправить только одну вершину для целого квадранта. Но недостатком является то, что его трудно повернуть ...
- 1. Сколько VAO и VBO
- 2. Я процесс, сколько я использую процессор?
- 3. Azure Table Storage - Сколько данных я использую?
- 4. Как узнать, сколько трафика SVN я использую?
- 5. Как узнать, сколько места я использую в MySql?
- 6. Сколько будет стоить, если я использую TeamCity + EC2?
- 7. Как узнать, сколько ресурсов памяти я использую с переменными sessionState
- 8. База данных Firebase - как узнать, сколько пространства я использую?
- 9. Сколько ceritificates мне понадобится, если я использую поддомены
- 10. Сколько блоков можно выделить, если я использую общую память?
- 11. Google Cloud Storage: сколько всего пространства я использую?
- 12. Я правильно использую автозаполнение JQuery? Сколько данных можно обрабатывать?
- 13. Когда я использую typedef или использую для int, сколько это еще int?
- 14. Управление VAO/VBO - изменение всех данных VBO
- 15. Лучший способ использования VBO
- 16. Как я могу изменить данные в VBO?
- 17. Цилиндр VBO OpenGL: Что я делаю неправильно?
- 18. VBO - Что я могу сделать при инициализации?
- 19. Я использую memcached правильно?
- 20. Тенденции поддержки CSS3 (или: сколько я могу потерять рынок, если я не использую флеш?)
- 21. Как я могу рассказать, сколько рабочих динамов я использую на Heroku?
- 22. Сколько объектов я плачу, когда я использую метод firstify() в запросах хранилища данных
- 23. C++: Я использую [], какую память использую?
- 24. Данные обновления OpenGL VBO
- 25. OpenTK - VBO - Крушение приложения
- 26. Отладка буферов вершин VBO
- 27. В PHP, когда я использую :: и когда я использую ->
- 28. KineticJS: Когда я использую toImage(), и когда я использую кеш()
- 29. glDrawElements with VBO
- 30. Я использую недоразумение assert()?