Utknąłem na jakiś czas, jak podejść do tego, więc wszelkie sugestie będą mile widziane!
Chcę zmapować teksturę w postaci prawego dolnego trójkąta euklidesowego na hiperboliczny trójkąt na dysku Poincare.
Oto tekstura (lewy górny trójkąt tekstury jest przezroczysty i nieużywany). Możesz to rozpoznać jako część I okręgu Eschera
Przepraszamy, zobacz komentarz, ponieważ nie wolno mi publikować więcej niż dwóch linków!
I tak wygląda mój wielokąt (jest wyśrodkowany na początku, co oznacza, że dwie krawędzie są liniami prostymi, jednak ogólnie wszystkie trzy krawędzie będą łukami kołowymi):
Środek wielokąta jest zachętą trójkąta euklidesowego utworzonego przez jego wierzchołki, a ja odwzorowuję teksturę UV za pomocą jego zachęty, dzieląc go na tę samą liczbę twarzy co wielokąt i odwzorowując każdą twarz na odpowiadającej mu powierzchni wielokąta. Jednak wynik wygląda następująco:
Jeśli ktoś myśli, że można to rozwiązać za pomocą mapowania UV, chętnie podam przykładowy kod, jednak zaczynam myśleć, że może to być niemożliwe i będę musiał napisać własne funkcje mapowania.
ROZWIĄZANE z pewnym dopracowaniem odpowiedzi @ Nathana poniżej, ponieważ linie AB, AC, BC mogą w rzeczywistości być łukami, a nie liniami.
Metoda: wybierz najdłuższą stronę, powiedzmy BC, a następnie podziel ją na parzystą liczbę części. Podziel pozostałe dwie strony na tę samą liczbę części. Zatem linie łączące je (DE w odpowiedzi poniżej) muszą faktycznie być łukami, a nie liniami prostymi. Podziel te nowe łuki zgodnie z wymaganiami, dodaj nowe trójkąty jako ściany, a następnie odwzoruj UV prawy dolny trójkąt tekstury na tych nowych ścianach.