В этой демке реализованы шлейфы, с двумя методами обновления и рендеринга:
Софтварный (Software) - Данный алгоритм, обновляя информацию позиций вершин, каждый рендеринг отчищает информацию о вершинах и трианглах в сюрфейсе, и пересоздаёт их с новыми позициями. Перемещять вершины много дольше, чем пересоздать геометрию небольшого объёма.
Аппаратный (Hardware) - Данный алгоритм, также обновляет данные позиции вершин, но геометрия (вершины и трианглы), создаются только 1 раз при создании шлейфа, каждый квад, по 2 вершинам назначаются индексы, массива позиций вершин. Каждый рендеринг отправляется в шейдер массив векторов позиций, и в вершинном шейдере, заместо перемножения на матрицу объекта, вершина позиции принемает данное из массива по индексу - этот метод называется Instancing.
Таким образом в первом варрианте было очень критично как количество шлефов, так и количество полигонов (длина) шлейфа, в аппаратном же варрианте, вершины затрачивают время только на рендеринг стандартной геометрии. Учитывая размер возможного массива, шлеф может быть не длинее 120 полигонов, при этом можно немножко оптимизировав добиться и 240. Таким образом, аппаратный метод рендеринга шлейфов, практически несёт лишь стандартную нагрузку рендеринга геометрии.
ЗЫ, это конечно начальная версия, в дальнейшем будет поворот в шейдере шлейфа к камере, что избавит от необходимости создавать перекрёстный шлейф, а также сделаю чтобы один вектор в массиве юзала одна грань полигона, а не каждая вершина. И анимированные материалы, и регулировка толщины, с наследием толщины грани. Но это позже..
Сорсы прилогаются (BlitzMax, кто переведёт на B3D, сравнит скорость просчёта, и убедится в выйгрыше BM, кто хочет перевести? В B3D, можно не юзать второй класс, а только массив).
Download (Bin+Source, 460Kb)
Тестируйте, нужны данные:
Average FPS: Software/Hardware
Averange Render: Software/Hardware ms
CPU: Model, Ghz, CPUs
Video: ATI/GF Model, Mb