8

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

У меня есть хорошее представление об установке, трубопроводе и т. Д., И теперь я перехожу к математике.

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

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

opengl es image vertex map

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

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

opengl es image warping

+0

им такая же проблема.did u получите решение? Как вы с ним поехали? Пожалуйста, помогите мне –

+1

извините, но это была работа для работодателя, поэтому я не могу раздавать код. манипулировать вершинными структурами внутри метода touchhesmoved. когда вы манипулируете вершинами, назначьте им вес, исходя из их расстояния от определенных точек, которые вы задали как «якоря», и от стен экрана. якоря могут быть размещены в любом месте; например, я приколол учеников, чтобы глаза не двигались. если вес равен 0, то на вершину не влияет. если вес равен 1, то применяется полное преобразование. новый x = (горизонтальное преобразование * вес), новый y = (вертикальное преобразование * вес). и т.д. –

+1

спасибо ............. –

ответ

4

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

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