8

Zajmuję się tworzeniem obrazu w systemie iOS z OpenGL ES 2.0.Algorytmy transformacji wierzchołków OpenGL ES 2.0

Mam dobrą znajomość konfiguracji, rurociągu itp. I teraz przechodzę do matematyki.

Ponieważ moje doświadczenie z wypaczaniem obrazu jest zerowe, sięgam po kilka sugestii algorytmu.

Obecnie ustawiam początkowe wierzchołki w punktach w rodzaju siatki, które równo dzielą obraz na kwadraty. Następnie umieszczam dodatkowy wierzchołek na środku każdego z tych kwadratów. Kiedy rysuję indeksów, każdy kwadrat zawiera cztery trójkąty w kształcie X. Patrz zdjęcie poniżej:

opengl es image vertex map

Po zagraniu z photoshop trochę zauważyłem Adobe używa nieco bardziej skomplikowany algorytm ich marionetkowa osnowa, ale znacznie bardziej uproszczony algorytm dla ich standardowej osnowy. Co według ciebie jest najlepsze dla mnie do zastosowania tutaj/osobistych preferencji?

Po drugie, kiedy poruszam wierzchołkiem, chciałbym zastosować transformację ważoną do wszystkich innych wierzchołków, aby wygładzić krawędzie (zamiast tego, co mam poniżej, gdzie tylko wybrany wierzchołek jest transformowany). Jaki algorytm powinienem tu zastosować?

opengl es image warping

+0

im ten sam problem. Czy masz rozwiązanie? Jak mi poszło? Pomóż mi –

+1

przykro mi, ale to była praca dla pracodawcy, więc nie mogę podać kodu. manipuluj strukturami wierzchołków w obrębie metody dotknięć. kiedy manipulujesz wierzchołkami, przypisuj im wagę na podstawie ich odległości od pewnych punktów ustawionych jako "kotwice" i od ścian ekranu. kotwice można umieścić w dowolnym miejscu; na przykład przygwoździłem źrenice, aby nie ruszały się z oczu. jeśli waga wynosi 0, to nie ma to wpływu na wierzchołek. jeśli waga wynosi 1, wówczas stosowana jest pełna transformacja. nowy x = (transformacja pozioma * waga), nowy y = (transformacja pionowa * waga). itp. –

+1

dziękuję ............. –

Odpowiedz

4

Ponieważ każdy wierzchołek jest przetwarzany niezależnie przez vertex shader, że nie jest łatwo mieć wierzchołki wpływać pozycjami. Jednakże, ponieważ nie ma zbyt wielu wierzchołków, dobrze jest wykonywać pracę na procesorze i dynamicznie aktualizować atrybuty wierzchołków na klatkę.

Ponieważ to, czego szukasz, to powierzchnia, która zachowuje się jak gumowa tafla, gdy jej części są ciągnięte, a co powiesz na wdrożenie dynamicznej symulacji arkusza gumy? Istnieje wiele dobrych artykułów na temat symulacji szmatkowania w pełnym 3D, takich jak Jeff Lander's. Twoja aplikacja może być uproszczeniem tych technik. Poprzednio miałem implemented a simulation like this w 3D. Potrzebowałem siły przyciągającej moje generowane wierzchołki do ich pierwotnych lokalizacji siatki. Możesz mieć podobną siłę przyciągającą wierzchołki do pikseli, w których są generowane przed rozpoczęciem symulacji. To spowodowałoby, że powrócą do swojego domyślnego stanu, gdy pozostaną w spokoju i stopniowo zmniejszą wpływ przeciągania na bardziej odległe wierzchołki.