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

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

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

La forma más efectiva de hacer este tipo de procesamiento de imágenes sería usar los sombreadores OpenGL ES 2.0. Una vez más, si puedo indicarle mi marco GPUImage , puede hacer muchas de las operaciones de distorsión que describe. Para aquellos que faltan, puedes escribir tus propios sombreadores de fragmentos.

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

Distorsión de abultamiento

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

Distorsión cóncava

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

Distorsión de remolino

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

Distorsión de pellizco

Si observa los sombreadores utilizados para cada uno de los filtros, verá que los cálculos son muy similares entre ellos. Debería poder modificar eso para producir sus propios efectos personalizados desde esta misma base.

Es bastante fácil aplicar estos filtros a UIImages. Si solo tiene un filtro que le gustaría usar, puede hacer algo como lo siguiente:

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

Esto creará un UIImage del disco, usará OpenGL ES para filtrarlo y devolverá un UIImage filtrado para que usted pueda trabajar con él. Puede utilizar una GPUImagePicture y una canalización de filtro personalizada si desea realizar efectos encadenados más avanzados, o puede utilizar una fuente de entrada diferente para filtrar videos o películas de la cámara en vivo.

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

El código de muestra de la extensión de edición de fotos de Apple Developer Connection hace esto exactamente.