He estado atrapado en cómo abordar esto por un tiempo, por lo que agradecería cualquier sugerencia.
Quiero mapear una textura en forma de un triángulo euclidiano inferior derecho a un triángulo hiperbólico en el disco Poincare.
Aquí está la textura (el triángulo superior izquierdo de la textura es transparente y no se usa). Puede reconocer esto como parte del Límite I del círculo de Escher
Lo siento, mira el comentario ya que parece que no puedo publicar más de dos enlaces.
Y así es como se ve mi polígono (está centrado en el origen, lo que significa que dos bordes son líneas rectas, sin embargo, en general, los tres bordes serán arcos circulares):
El centro del polígono es el incentivo del triángulo euclidiano formado por sus vértices y estoy mapeando la textura con UV usando su incentivo, dividiéndolo en la misma cantidad de caras que tiene el polígono y mapeando cada cara en la cara del polígono correspondiente. Sin embargo, el resultado se ve así:
Si alguien piensa que esto se puede resolver con el mapeo UV, me complacería proporcionar un código de ejemplo, sin embargo, estoy empezando a pensar que esto podría no ser posible y tendré que escribir mis propias funciones de mapeo.
RESUELTO con un poco de refinamiento de la respuesta de @ Nathan a continuación, ya que las líneas AB, AC, BC en realidad pueden ser arcos, no líneas.
Método: elige el lado más largo, por ejemplo BC, luego subdivide esto en un número par de partes. Subdivida los otros dos lados en la misma cantidad de partes. Entonces, las líneas que conectan estos (DE en la respuesta a continuación) también deben ser arcos, no líneas rectas. Subdivida estos nuevos arcos según sea necesario, agregue los nuevos triángulos como caras y luego asigne en UV el triángulo inferior derecho de la textura a estas nuevas caras.
fuente
Respuestas:
Supongo que para que la textura se vea bien, también tendrá que subdividir el interior del triángulo y aproximar el mapeo UV no lineal dentro de él.
Actualmente, parece que está subdividiendo alrededor de los bordes del triángulo y formando un abanico de triángulos más pequeños entre el borde y el incentro. Esto estaría bien si solo estuviera renderizando el triángulo en un color sólido. Pero cuando aplica una textura, obtiene discontinuidades en los límites de esas subdivisiones, porque la textura se estira linealmente a través de cada triángulo subdividido y no se aproxima correctamente al mapeo hiperbólico a lo largo de la dirección radial.
Tendrá que subdividir a lo largo de ambos ejes, algo como esto:
y coloque todos los vértices adecuadamente en el espacio de la pantalla y en el espacio UV para aproximar las coordenadas hiperbólicas en el interior del triángulo. Si se subdivide lo suficientemente fino, esto debería producir la ilusión de un mapeo de textura continuamente curva.
fuente