2013-02-21 4 views
1

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

Я рассмотрел 2 варианта, но поскольку я не эксперт OpenGL, я не знаю, что лучше.

  1. Используйте VBOs для рендеринга их всех.
    Плюсы: быстрее, чем немедленный режим.
    Против: (Я не знаю много о VBOs, но) из того, что я собираю, координаты квадроциклов должны храниться в некотором буфере в ОЗУ ... и все эти координаты должны быть вычислены CPU. Поэтому для частицы P1 (x, y) мне пришлось бы вычислить 4 других координаты (P2 (x-1, y-1), P3 (x-1, y + 1), P4 (x + 1, y + 1) , P5 (x + 1, y-1)) - это большая работа для процессора!

  2. Используйте список отображения: Сначала создайте крошечный список отображения для одного квадратного квадрата. Затем, чтобы сделать каждую частицу примерно pushMatrix, glTranslate, callList, popMatrix.
    Плюсы: мне не нужно вычислять 4 координаты вручную - glTranlate делает это.
    Предположительно, списки отображения быстрее, чем VBOs.
    Минусы: они быстрее, чем VBOs, когда они содержат только один квад?

Имейте в виду: я звоню OpenGL вещи из Java, так что нет гладкий способ преобразования Java массивов в GPU массивов (все должно быть сохранено в промежуточных FloatBuffers до отчисления).

+0

Возможно ли это? – Aesthete

ответ

1

Показать списки для статической геометрии. Оказание всего одного квадрата, а затем изменение трансформации, полоскание и повторение ужасно неэффективно.

Обновление VBOs лучше, но все еще не оптимально.

Вы должны изучить внутренний визуальный результат. Вот учебник:

http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html

В случае простых каре с использованием геометрией шейдера поворотом простых GL_POINTS в два GL_TRIANGLES будет делать трюк, как хорошо.