2015-09-08 2 views
0

Предположим, у меня есть сотни прямоугольников на моей сцене. Каждый из них меняется каждый кадр:Обновить VBO или использовать форму?

  • они двигаются над сценой, они вращаются, масштабирование вверх/вниз изменения цвета
  • вершин и должен сочетаться с цветом текселя
  • текстуры координационных изменений, потому что те 2D анимация

Как мне сделать это, чтобы получить наилучшую производительность? Есть мои идеи. Пожалуйста, помогите мне выбрать лучший из них или предложить что-то другое:

  • обновление VBO каждый кадр
  • сделать больше вершин, чем потребность (например, хранить кадры всей анимации в VBO) и выбрать визуализируется (вызов glDrawElements много раз)
  • посыла изменения данных через мундирах и пересчитать его в вершинный шейдер вместо CPU

главный вопрос на самом деле: какие функции можно назвать столько раз, сколько я хочу, и которые следует избегать вызова более одного раза в основной цикл?

+0

VBO? вы имеете в виду ВАО? в вашем случае, посмотрите [instanced rendering] (http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html). – Gnimuc

ответ

2

Обычно модель остается неизменной в своем локальном пространстве, поэтому вам нужно только загрузить ее один раз в VBO. Такие изменения, как переводы, вращения, масштабирование и т. Д., Выполняются путем загрузки соответствующих матриц преобразования в униформу и использования их в шейдерах.

+0

Спасибо, это мне помогло. Как насчет вызова glDrawElements много раз? Предположим, у меня 2D-анимация и все ~ 100 кадров в одном VBO. Каждый основной цикл я хотел бы отобразить только 2 треугольника из этого VBO. Это хорошая идея? Другой способ - сохранить 2 треугольника в VBO и обновить их текстурные координаты или передать их через униформу. Я знаю, что все будет нормально работать, но как насчет производительности в каждом направлении? – ElChupacabra

+1

Трудно предсказать, потому что разные графические процессоры/драйверы будут вести себя по-разному. Если вы просто изображаете пару разных треугольников, каждый кадр и VBO остается неизменным, вы должны быть в порядке. Но опять же меньший VBO и равномерное обновление - это тоже то, что драйверы хорошо обрабатывают, поэтому я не могу сказать, что будет работать лучше. Мое предложение для вас - это сначала выяснить, где находится ваше узкое место, и только потом обратиться к нему. –

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