Я застрял на том, как подойти к этому некоторое время, поэтому любые предложения будут с благодарностью!
Я хочу отобразить текстуру в форме нижнего правого евклидова треугольника на гиперболический треугольник на диске Пуанкаре.
Вот текстура (верхний левый треугольник текстуры прозрачен и не используется). Вы можете узнать это как часть ограничения круга Эшера I
Извините, смотрите комментарий, так как мне не разрешено публиковать более двух ссылок!
И вот как выглядит мой многоугольник (он центрирован в начале координат, что означает, что два ребра являются прямыми линиями, однако в целом все три ребра будут дугами окружности):
Центр многоугольника является центром евклидова треугольника, образованного его вершинами, и я наносю на карту UV текстуру, используя ее центр, разделяя ее на то же количество граней, что и у многоугольника, и сопоставляя каждую грань с соответствующей гранью многоугольника. Однако результат выглядит так:
Если кто-то думает, что это можно решить с помощью УФ-картографирования, я был бы рад предоставить пример кода, однако я начинаю думать, что это может быть невозможно, и мне придется написать свои собственные функции картографирования.
Решено с некоторым уточнением ответа @ Натана ниже, так как линии AB, AC, BC на самом деле могут быть дугами, а не линиями.
Метод: выберите самую длинную сторону, скажем BC, затем разделите ее на четное количество частей. Разделите две другие стороны на одинаковое количество частей. Тогда соединяющие их линии (DE в ответе ниже) также должны быть дугами, а не прямыми. Подразделите эти новые дуги по мере необходимости, добавьте новые треугольники в качестве граней, затем UV-отображение нижнего правого треугольника текстуры на эти новые грани.
источник
Ответы:
Я предполагаю, что для того, чтобы текстура выглядела правильно, вам нужно будет также разделить внутреннюю часть треугольника и приблизить нелинейное UV-отображение внутри него.
В настоящее время, похоже, что вы делитесь вокруг краев треугольника и формируете веер из меньших треугольников между ребром и стимулятором. Это было бы хорошо, если бы вы только рендерили треугольник в сплошной цвет. Но при применении текстуры вы получаете разрывы на границах этих подразделений, потому что текстура просто растягивается линейно по каждому подразделенному треугольнику и не корректно аппроксимирует гиперболическое отображение вдоль радиального направления.
Вам нужно будет разделить вдоль обеих осей, что-то вроде этого:
и расположите все вершины соответствующим образом в пространстве экрана и в пространстве UV, чтобы приблизить гиперболические координаты внутри треугольника. Если вы поделите достаточно точно, это должно создать иллюзию непрерывно изгибающегося текстурного наложения.
источник