8

Sto sviluppando un'app per iOS di deformazione dell'immagine con OpenGL ES 2.0.Algoritmi di conversione del vertice OpenGL ES 2.0

Ho una buona conoscenza del setup, della pipeline, ecc., E ora mi sto spostando verso la matematica.

Poiché la mia esperienza con il warping dell'immagine è nulla, sto cercando suggerimenti per l'algoritmo.

Attualmente, sto impostando i vertici iniziali in punti in una modalità di tipo griglia, che divide equamente l'immagine in quadrati. Quindi, posto un vertice aggiuntivo nel mezzo di ognuno di quei quadrati. Quando disegno gli indici, ogni quadrato contiene quattro triangoli a forma di una X. vedere l'immagine qui sotto:

opengl es image vertex map

Dopo aver giocato con un po 'di photoshop, ho notato adobe utilizza un algoritmo di un po' più complicato per loro burattino, ma un algoritmo molto più semplificato per il loro warp standard. Cosa pensi che sia meglio per me applicare qui/preferenza personale?

In secondo luogo, quando si sposta un vertice, mi piacerebbe applicare una trasformazione ponderata a tutti gli altri vertici per appianare i bordi (anziché quello che ho di seguito, dove viene trasformato solo il vertice selezionato). Che tipo di algoritmo dovrei applicare qui?

opengl es image warping

+0

lo stesso problema. Ho trovato la soluzione? Per favore, aiutami –

+1

scusa, ma era un lavoro per un datore di lavoro, quindi non posso distribuire il codice. manipolare le strutture del vertice all'interno del metodo touchesmoved. quando si manipolano i vertici, assegnare loro un peso in base alla loro distanza da determinati punti impostati come "ancore" e dalle pareti dello schermo. le ancore potrebbero essere posizionate ovunque; per esempio, ho bloccato le pupille per impedire agli occhi di muoversi. se il peso è 0, allora il vertice non è influenzato. se il peso è 1, viene applicata una trasformazione completa. nuovo x = (trasformazione orizzontale * peso), nuovo y = (trasformazione verticale * peso). ecc. –

+1

grazie ............. –

risposta

4

Come ogni vertice viene elaborato indipendentemente dal vertex, non è facile avere vertici influenzano le posizioni reciproche. Tuttavia, poiché non ci sono molti vertici, dovrebbe andare bene il lavoro sulla CPU e aggiornare in modo dinamico gli attributi dei vertici per fotogramma.

Dal momento che ciò che stai cercando è che la tua superficie si comporti come un foglio di gomma mentre le parti vengono tirate, che ne dici di andare avanti e implementare una simulazione dinamica di un foglio di gomma? Esistono numerosi buoni articoli sulla simulazione di tessuti in 3D, ad esempio Jeff Lander's. La tua applicazione potrebbe essere una semplificazione di queste tecniche. Ho precedentemente implemented a simulation like this in 3D. Ho richiesto una forza che attrasse i miei vertici generati nelle loro posizioni originali della griglia. Potresti avere una forza simile che attrae i vertici ai pixel in cui sono generati prima che inizi la simulazione. Ciò li farebbe ritornare al loro stato predefinito quando lasciati soli e ridurrebbe progressivamente l'influenza del trascinamento su vertici più lontani.