¿Cómo puede aplicar distorsiones a un UIImage usando OpenGL ES?

¿Hay alguna manera de crear efectos como abolladuras, pellizcos, torsiones, aplastamientos, etc. en un UIImage usando OpenGL ES como en la aplicación de iPhone PhotoTwist ?

¿Hay alguna reference o guía para hacer esto? No quiero código, solo una reference sobre cómo hacer esto.

La manera más eficaz de hacer este tipo de image processing sería usar sombreadores OpenGL ES 2.0. Una vez más, si pudiera apuntarte a mi marco GPUImage , puede hacer muchas de las operaciones de distorsión que describes. Para aquellos que faltan, puede escribir sus propios sombreadores de fragment.

Los efectos que tengo allí son una distorsión de bulto convexo (usando un GPUImageBulgeDistortionFilter):

Distorsión de la bulto

una distorsión cóncava (usando un parámetro de escala invertido al filter anterior):

Distorsión cóncava

una distorsión del remolino (usando el GPUImageSwirlFilter):

Distorsión del remolino

y finalmente, una distorsión de pellizco (usando el GPUImagePinchDistortionFilter):

Distorsión pellizca

Si observa los sombreadores utilizados para cada uno de los filters, encontrará que las matemáticas son muy similares entre ellos. Debería poder ajustar eso para producir sus propios efectos personalizados desde esta misma base.

Es bastante fácil aplicar estos filters a UIImages. Si tiene un solo filter que desea usar, puede hacer algo como lo siguiente:

UIImage *inputImage = [UIImage imageNamed:@"test.jpg"]; GPUImageBulgeDistortionFilter *stillImageFilter = [[GPUImageBulgeDistortionFilter alloc] init]; UIImage *quickFiltenetworkingImage = [stillImageFilter imageByFilteringImage:inputImage]; 

Esto creará un UIImage desde el disco, usará OpenGL ES para filtrarlo y devolverá un UIImage filtrado para que usted trabaje. Puede usar una GPUImagePicture y una tubería de filter personalizada si desea realizar efectos encadenados más avanzados, o puede usar una fuente de input diferente para filtrar películas o videos de cameras en vivo.

El código fuente de este proyecto está disponible en el enlace anterior bajo una licencia de BSD, por lo que puede profundizar en él para ver cómo transferir datos ay desde OpenGL ES y cómo realizar este tipo de filters.

El código de ejemplo de Extensión de edición de fotos de la Conexión de desarrollador de Apple hace exactamente esto.