Saya telah terjebak pada cara pendekatan ini untuk sementara waktu, jadi setiap saran akan sangat dihargai!
Saya ingin memetakan tekstur dalam bentuk segitiga euclidean kanan bawah ke segitiga hiperbolik pada Disk Poincare.
Inilah teksturnya (segitiga kiri atas teksturnya transparan dan tidak digunakan). Anda mungkin mengenali ini sebagai bagian dari Batas Lingkaran Escher I
Maaf, lihat komentar karena saya tidak diizinkan memposting lebih dari dua tautan!
Dan inilah bentuk poligon saya (berpusat pada titik asal, yang berarti bahwa dua tepi adalah garis lurus, namun secara umum ketiga tepi akan menjadi busur lingkaran):
Pusat poligon adalah incentre dari segitiga euclidean yang dibentuk oleh verteksnya dan saya UV memetakan tekstur menggunakan incentre itu, membaginya menjadi jumlah wajah yang sama seperti yang dimiliki poligon dan memetakan setiap wajah ke wajah poligon yang sesuai. Namun hasilnya terlihat seperti ini:
Jika ada yang berpikir ini bisa dipecahkan dengan menggunakan pemetaan UV saya akan dengan senang hati memberikan beberapa contoh kode, namun saya mulai berpikir ini mungkin tidak mungkin dan saya harus menulis fungsi pemetaan saya sendiri.
ASK dengan beberapa perbaikan jawaban @ Nathan di bawah ini karena baris AB, AC, BC mungkin sebenarnya busur bukan garis.
Metode: pilih sisi terpanjang, katakan BC, lalu bagikan ini menjadi beberapa bagian. Bagi dua sisi yang lain menjadi jumlah bagian yang sama. Maka garis yang menghubungkan ini (DE dalam jawaban di bawah) harus benar-benar juga menjadi busur, bukan garis lurus. Bagi busur baru ini sesuai kebutuhan, tambahkan segitiga baru sebagai wajah lalu UV memetakan segitiga kanan bawah tekstur ke wajah-wajah baru ini.
sumber
Jawaban:
Dugaan saya adalah bahwa untuk mendapatkan tekstur agar terlihat benar, Anda harus membagi bagian dalam segitiga juga, dan memperkirakan pemetaan UV non-linear di dalamnya.
Saat ini, sepertinya Anda membagi lagi di sekitar tepi segitiga, dan membentuk kipas segitiga yang lebih kecil di antara tepi dan incenter. Ini akan baik-baik saja jika Anda hanya menampilkan segitiga dalam warna solid. Tetapi ketika menerapkan tekstur, Anda mendapatkan diskontinuitas pada batas-batas subdivisi tersebut, karena tekstur hanya membentang secara linier di setiap segitiga yang dibagi dan tidak mendekati perkiraan pemetaan hiperbolik sepanjang arah radial.
Anda harus membagi sepanjang kedua sumbu, kira-kira seperti ini:
dan posisikan semua simpul secara tepat di ruang layar dan ruang UV untuk mendekati koordinat hiperbolik di bagian dalam segitiga. Jika Anda membagi cukup halus, ini akan menghasilkan ilusi pemetaan tekstur melengkung terus menerus.
sumber