Рендеринг тысяч движущихся квадроциклов
Я должен сделать большое количество частиц. Эти частицы представляют собой простые нетекстурированные квадраты (на самом деле квадраты). О, и они все время движутся, так как они частицы.
Я рассмотрел 2 варианта, но так как я не эксперт по OpenGL, я не знаю, что лучше.
Используйте VBO для визуализации их всех.
Плюсы: быстрее, чем немедленный режим.
Минусы: (я не знаю много о VBO, но) из того, что я собираю, координаты квадов должны храниться в некотором буфере в ОЗУ... и все эти координаты должны вычисляться ЦП. Поэтому для частицы P1(x,y) мне нужно будет вычислить 4 другие координаты (P2(x-1,y-1), P3(x-1,y+1), P4(x+1,y+1), P5(x+1,y-1)) - это много работы для процессора!Используйте список отображения: сначала создайте крошечный список отображения для одного квадратного квадрата. Затем, чтобы сделать каждую частицу,
pushMatrix, glTranslate, callList, popMatrix
,
Плюсы: мне не нужно вычислять 4 координаты вручную - это делает glTranlate.
Предположительно списки отображения быстрее, чем VBO.
Минусы: они быстрее, чем VBO, если они содержат только один квад?
Напоминаю: я называю OpenGL из Java, так что нет плавного способа преобразования Java-массивов в массивы GPU (все должно быть сохранено в промежуточных FloatBuffers перед передачей).
2 ответа
Списки отображения предназначены для статической геометрии. Рендеринг только одного квадратора, изменение трансформации, промывка и повторение ужасно неэффективны.
Обновление VBO лучше, но все же не оптимально.
Вы должны посмотреть на рендеринг экземпляров. Вот учебник:
http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html
В случае простых четырехугольников, использующих геометрический шейдер, превращение простого GL_POINTS в два GL_TRIANGLES также поможет.
Для моделирования частиц я думаю, что вам нужно преобразовать обратную связь, вот хорошая демонстрация с некоторым кодом того, как это сделать http://prideout.net/blog/?tag=opengl-transform-feedback