Відображення текстури на гіперболічний трикутник


9

Я на деякий час застряг, як підійти до цього, тому будь-які пропозиції будуть вдячні вам!

Я хочу зіставити текстуру у вигляді правого нижнього евклідового трикутника до гіперболічного трикутника на диску Пуанкаре.

Ось текстура (верхній лівий трикутник текстури прозорий і невикористаний). Ви можете визнати це частиною Межі кола Ешера

Вибачте, дивіться коментар, оскільки мені не дозволяється публікувати більше двох посилань!

Ось так виглядає мій багатокутник (він зосереджений на початку, а це означає, що два ребра - прямі, проте загалом усі три ребра будуть круговими дугами):

Каркасний полігон

Центр багатокутника - це інцентр евклідового трикутника, утворений його вершинами, і я ультрафіолетово відображаю текстуру, використовуючи її інцентр, розділяючи його на таку ж кількість граней, як і багатокутник, і відображаючи кожну грань на відповідну грань полігона. Однак результат виглядає приблизно так:

Текстурований багатокутник

Якщо хтось думає, що це вирішується за допомогою УФ-карти, я би радий надати приклад коду, проте я починаю вважати, що це може бути неможливим, і мені доведеться написати власні функції картографування.

ВИРІШЕНО деяким уточненням відповіді @ Натана нижче, оскільки лінії AB, AC, BC можуть насправді бути дугами, а не лініями.

Спосіб: виберіть найдовшу сторону, скажімо BC, а потім поділіть її на парну кількість частин. Інші дві сторони поділіть на однакову кількість частин. Тоді лінії, що з'єднують ці (DE у відповіді нижче), насправді також повинні бути дугами, а не прямими. Розділіть ці необхідні нові дуги, додайте нові трикутники як грані, а потім УФ-карту нижнього правого трикутника текстури до цих нових граней.

Простий? Зовсім ні. Але це спрацювало. Риба 1 Риба 2


Ось текстура, яку я використовую: i.stack.imgur.com/SEi0G.png
Blue

1
Я припускаю, що проблема полягає у стрижці зображення? Я бачу, це трапляється там, коли у вас є непослідовні відстані між вершинами трикутного підрозділу. Я здогадуюсь, що ви використовуєте послідовні кроки для вашої карти UV, надаючи ефект стрижки.
Даніель М Гессел

Я фактично зафіксував, що незабаром після опублікування цього повідомлення, зробивши підрозділи послідовними та меншими, він дещо фіксує стрижку (хоча і не повністю). Однак текстура все ще дуже спотворена. Я працюю над пропозицією @nathan нижче, яка, як мінімум, дозволить значно тонше підрозділити.
Lewy Blue

1
@Looeee Чи можете ви передати свій код, будь ласка, мене дуже цікавить ця графіка
x-rw

Так, ви можете знайти мій код тут: github.com/looeee/blackthread-heroku/tree/master/assets/js/src/… І жива версія: blackthread.io/experiment/eschersketch Чесно кажучи, це так давно, як я подивився при цьому я не можу пригадати, де в коді є функції, що вирішують це, але якщо у вас виникли проблеми з розумінням цього, киньте мені ще один коментар, і я погляну.
Lewy Blue

Відповіді:


8

Я здогадуюсь, що для того, щоб текстура виглядала правильно, вам доведеться також розділити внутрішню частину трикутника і наблизити нелінійне УФ-відображення всередині нього.

Наразі схоже, що ви розділяєте краї трикутника і утворюєте віяло менших трикутників між ребром та спонукачем. Це було б добре, якби ви просто рендерирували трикутник суцільним кольором. Але застосовуючи текстуру, ви отримуєте розриви на межах цих підрозділів, тому що текстура просто натягується лінійно по кожному поділеному трикутнику і неправильно наближається до гіперболічного відображення вздовж радіального напрямку.

Вам потрібно буде розділити обидві осі, приблизно так:

введіть тут опис зображення

і розташувати всі вершини належним чином у просторі екрану та ультрафіолетовому просторі для наближення гіперболічних координат у внутрішній частині трикутника. Якщо підрозділити досить тонко, це повинно створити ілюзію безперервного викривлення текстуру.


1
Дякую, я спробую це. Це був один із моїх оригінальних методів побудови багатокутника, але набагато складніший математично, тому я пішов із більш простим методом. Я дам ще один знімок і доповім.
Lewy Blue

Дякую. Я зміг змінити вашу пропозицію на рішення. Дивіться мою редакцію вище.
Lewy Blue
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.