Le but de cet algorithme est de traduire (appliquer un filtre à) une image bitmap 2D (en niveau de gris) en une surface 3D composées de points de triangles ou de carrés. L'interêt est de pouvoir simplement produire des surfaces 3D maillés à partir d'image 2D. Le principe de l'algorithme est de voir les pixels comme un tableau de Points 3D (xyz), dont les composantes X et Y sont la hauteur et la largeur de l'image, et la composante Z est le niveau de gris, la couleur.
Cela revient à regarder l'image 2D, et à considérer les niveaux de gris comme des altitudes différentes. Le noir étant l'altitude minimale d'un point et le blanc l'altitude maximale d'un point. Ensuite il suffit de dessiner ou de récupérer des images en niveau de gris pour pouvoir les tranformer en surfaces 3D.
Dans un premier temps je voulais simplement utiliser une image pour générer une surface 3D de triangles maillés. Puis j'étendais un jour plus tard, le concept à un maillage de carrés. Mais quelquechose me chiffonnait. En effet dans les deux cas des triangles et des carrés, je créais des points, mais n'avais pas la possibilité de simplement créer des points, tous seuls. Il suffisait seulement de le permettre en créant une IHM approprié, puisque je le calcul de nouveaux points existait déjà. Cela permet de créer des mailages de points rectangulaires. Le but est d'ouvrir le plus possible l'algorithme pour l'utiliser dans le maximum de cas possible. Il faut rendre simple, la construction d'objet 3D à partir d'image HeightMap.
Ce faisant cet algorithme devenait un filtre permettant de créer des objets 3D de plus ou moins grandes préscisions, comme des surfaces de terrains de mars ou de l'ile d'Hawaï. Mais cela permettait seulement de pouvoir faire, au mieux, une face d'un objet 3D, avec des bords rectangulaires. On ne peut utiliser une image plane, transformé en un rectangle 3D, pour construire un objet3D irrégulier fermé. Mais en utilisant deux fois la même image une fois dans un sens positif pour la hauteur, une deuxiéme fois dans un sens négatif, cela permettait de créer un objet 3D, fermé. Il restait encore à pouvoir créer des objets avec des contours irréguliers, cad non rectangulaires. C'était le probléme des points qui ne doivent pas être pris en compte pour la construction de la surface 3D. Il fallait introduire la notion de transparence, c'est à dire l'altitude à partir de laquelle on ne doit pas créer de points et donc de triangles ou de carrés. On avait là, un moyen simple de pouvoir créer des objets 3D à partir de 2 moules, deux images en niveau de gris représentant chacune une face d'un objet 3D complet.
L'algorithme pour moi est dit naïf, car il est assez simple, et découpe en étape le traitement de l'image en une surface 3D plus ou moins auto-organisés. Il depend essentiellement des capacités de calculs et de mémoires de l'ordinateur pour être plus rapide, tout en utilisant des images de plus en plus grandes, et donc créer des objets avec de plus en plus de préscisions, de plus en plus rapidement. On verra dans 5 ans, ce que l'on pourra faire avec cet algo sur un futur ordinateur.
Il restait pour moi, encore un cas particulier pour lequel on ne pouvait utiliser des Images pour générer des surfaces, c'était pour générer des surfaces avec des verticales. En effet l'algo HeightMap lie des points espacés sur une grille plane. Il ne peut y avoir de verticale. Seulement des surfaces trés pentus, mais jamais totalement verticale. Le probléme apparait mieux si l'on prend le cas de la construction de buildings à partir d'une height map. Une simple ligne noir, dans un rectangle blance, peut être une route. Avec l'algo Height Map, on a seulement une sorte de vallée triangulaire. Ce probléme, est l'objet d'un autre algorithme : Verticale Height Map.