OpenGL ES 2.0 алгоритмы преобразования вершин - PullRequest
8 голосов
/ 20 марта 2012

Я разрабатываю приложение iOS для деформирования изображений с OpenGL ES 2.0.

Я хорошо разбираюсь в настройках, конвейере и т. Д., И теперь я перехожу к математике.

Поскольку мой опыт с деформацией изображения равен нулю, я обращаюсь к некоторым предложениям алгоритма.

В настоящее время я устанавливаю начальные вершины в точках в виде сетки, которые делят изображение поровну.на квадраты.Затем я помещаю дополнительную вершину в середину каждого из этих квадратов.Когда я рисую индексы, каждый квадрат содержит четыре треугольника в форме X. Смотрите изображение ниже:

opengl es image vertex map

Немного поиграв с фотошопом, я заметил, что Adobe используетнемного более сложный алгоритм для их деформации марионетки, но гораздо более упрощенный алгоритм для их стандартной деформации.Как вы думаете, что мне лучше применить здесь / личные предпочтения?

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

opengl es image warping

1 Ответ

4 голосов
/ 21 марта 2012

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

Так как вы ищете, чтобы ваша поверхность действовала как резиновый лист, когда его части тянут, как насчет продвижения вперед и реализации динамического моделирования резинового листа? Есть много хороших статей по моделированию одежды в полном 3D, таких как Jeff Lander's . Ваше приложение может быть упрощением этих методов. Ранее я реализовал симуляцию, подобную этой в 3D. Мне потребовалась сила, притягивающая мои сгенерированные вершины к их исходным местам на сетке. Вы можете иметь аналогичную силу, притягивающую вершины к пикселям, на которых они генерируются до начала симуляции. Это заставит их вернуться в исходное состояние, если их оставить в покое, и постепенно уменьшит влияние перетаскивания в более отдаленные вершины.

...