Algoritmo a alto nivel:
- Partiendo de una triangulación (la misma en todas las imágenes)
- Pero con los vértices de los triángulos adaptados a las particularidades de cada cara
- El efecto de morphing, se crea haciendo una transición de la triangulación de una imágen a la de la imagen siguiente, haciendo a la vez un fundido de la imagen de cada triángulo
Triangulación de Delaunay:
- Se hace uso de una librería profesional de triangulación incremental de Delaunay que traduje a Java de una implementación en C++ que encontré en internet, cuyo algoritmo lo idearon investigadores del tema.
- Función añadida (porque la necesitaba): opción de revertir la inserción del último vértice, cosa que viene como anillo al dedo para que el usuario tenga un vértice tentativo al vuelo, hasta que lo formalice en la triangulación (demo).
- Función añadida (superinteresante): poder definir el dominio inicial con forma de rectángulo, en lugar de con un triángulo (cosa no trivial, por lo menos con mi background!!).
- Función añadida para recorrer los triángulos de la triangulación con el patrón de diseño Visitor.
Funciones interesantes creadas:
- Algebra básica: Transformación de las coordenadas de un punto interior a un triángulo, a las coordenadas dentro de otro triángulo, conociendo los vértices de ambos triángulos
- Matemática básica: Recorrer los pixels de un triángulo, con el patrón de diseño Visitor.
- Opción multi-hilo para crear la secuencia de vídeo.
Con la versión v1.1, se facilita mucho al usuario la creación de la triangulación, ya que se puede hacer uso de una librería de detección de caras con I.A., que se invoca por API rest a un servidor propio en la nube.
Gracias a esa librería, podemos partir de una triangulación con los 68 vértices detectados de cada cara, y podemos seguir añadiendo vértices, si lo consideramos necesario.