Je suis coincé sur la façon d'aborder cela depuis un moment, donc toutes les suggestions seraient grandement appréciées!
Je veux mapper une texture sous la forme d'un triangle euclidien inférieur droit à un triangle hyperbolique sur le disque de Poincaré.
Voici la texture (le triangle supérieur gauche de la texture est transparent et inutilisé). Vous pourriez reconnaître cela comme faisant partie du cercle limite d'Escher I
Désolé, voir le commentaire car je ne suis pas autorisé à poster plus de deux liens semble-t-il!
Et voici à quoi ressemble mon polygone (il est centré à l'origine, ce qui signifie que deux arêtes sont des lignes droites, mais en général, les trois arêtes seront des arcs de cercle):
Le centre du polygone est l'incentre du triangle euclidien formé par ses sommets et je mappe la texture UV à l'aide de son incentre, la divisant en le même nombre de faces que le polygone et mappant chaque face sur la face du polygone correspondante. Cependant, le résultat ressemble à ceci:
Si quelqu'un pense que cela est résoluble en utilisant le mappage UV, je serais heureux de fournir un exemple de code, mais je commence à penser que cela pourrait ne pas être possible et je devrai écrire mes propres fonctions de mappage.
RESOLU avec un certain raffinement de la réponse de @ Nathan ci-dessous car les lignes AB, AC, BC peuvent en fait être des arcs et non des lignes.
Méthode: choisissez le côté le plus long, disons BC, puis subdivisez-le en un nombre pair de pièces. Subdivisez les deux autres côtés en le même nombre de pièces. Ensuite, les lignes qui les relient (DE dans la réponse ci-dessous) doivent également être des arcs et non des lignes droites. Subdivisez ces nouveaux arcs selon vos besoins, ajoutez les nouveaux triangles en tant que faces puis mappez UV le triangle inférieur droit de la texture à ces nouvelles faces.
la source
Réponses:
Je suppose que pour obtenir une texture correcte, vous devrez également subdiviser l'intérieur du triangle et approximer la cartographie UV non linéaire à l'intérieur.
Actuellement, il semble que vous vous subdivisiez autour des bords du triangle et que vous formiez un éventail de triangles plus petits entre le bord et l'incitateur. Ce serait bien si vous deviez simplement rendre le triangle d'une couleur unie. Mais lorsque vous appliquez une texture, vous obtenez des discontinuités aux limites de ces subdivisions, car la texture est simplement étirée linéairement à travers chaque triangle subdivisé et n'approximant pas correctement le mappage hyperbolique le long de la direction radiale.
Vous devrez subdiviser le long des deux axes, quelque chose comme ceci:
et positionnez tous les sommets de manière appropriée dans l'espace d'écran et l'espace UV pour approximer les coordonnées hyperboliques à l'intérieur du triangle. Si vous subdivisez assez finement, cela devrait produire l'illusion d'un mappage de texture incurvé en continu.
la source