2013-06-21 9 views
1

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

Здесь концептуально работает мой алгоритм выращивания винограда. выберите любую точку на объектной сетке в качестве корневой точки, алгоритм выращивания винограда генерирует ряд точек (представляющих виноград) в соответствии с предыдущими полученными точками. На позиции точек влияют такие факторы, как гравитация, адгезия и расстояние до треугольных граней. Каждая точка должна быть в той же стороне, что и нормаль треугольной грани.

Как это сделать на графическом процессоре? Большое спасибо.

+0

«Я как-то знаю, как это сделать на процессоре» Честно говоря, я не думаю, что это достаточно хорошо. Сначала вы должны определить алгоритм. Если вы используете 'glm' для типов данных, таких как точки, это будет очень легко преобразовать в GLSL. Теоретически. Однако вычисление расстояния точки до целой сетки, вероятно, не произойдет в шейдере. Какую геометрию вы хотите выращивать на лозе? Стена, шест, дерево? Сложность этой геометрии будет влиять на то, какие части алгоритма вы можете поместить в шейдеры. –

+0

любая нормальная сетка, после некоторого исследования я думаю, что gpu не подходит для моего дела. Спасибо. – Nowibananatzki

ответ

1

Если вы хотите сделать что-то подобное, это не так хорошо отображает конвейер рендеринга, в glsl; лучше всего использовать compute shaders (если вам не нужно реализовывать это в glsl, вы также можете взглянуть на OpenCL или CUDA в качестве возможных альтернатив, хотя обратите внимание, что CUDA в вендоров, заблокированных графическими процессорами NVIDIA) в этом если вы можете использовать его для генерации геометрии винограда, используя любой метод, который вы планировали; затем визуализируйте лозы как обычно во втором проходе.

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

+0

Спасибо, теперь я знаю, что gpu работает параллельно, что не подходит для моего дела. – Nowibananatzki

+0

@Norwizki Я думаю, что часть того, что вы хотите сделать, хорошо подходит для GPU. Если у вас есть сегмент линии, представляющий стержень, вы можете использовать геометрический шейдер для генерации геометрии стебля и листьев. Вероятно, только генерация самого стебля произойдет на процессоре. –

+0

@ AndreasHaferburg, но я хочу симулировать «растущую» анимацию виноградной лозы, и в этом случае мне нужно генерировать ствол один за другим. как мне управлять геометрическим шейдером, чтобы сделать это? – Nowibananatzki

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

  • Нет связанных вопросов^_^