Mapear una textura en un triángulo hiperbólico

9

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):

Polígono de estructura metálica

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í:

Polígono Texturizado

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.

¿Simple? De ningún modo. Pero funcionó. Pescado 1 Pescado 2

Lewy Blue
fuente
Aquí está la textura que estoy usando: i.stack.imgur.com/SEi0G.png
Lewy Blue
1
Supongo que el problema es el corte de la imagen? Veo que esto sucede cuando tienes un espaciado inconsistente entre los vértices de la subdivisión triangular. Supongo que está utilizando pasos consistentes para su mapeo uv, dándole el efecto de corte.
Daniel M Gessel
De hecho, lo arreglé poco después de publicar esto al hacer que las subdivisiones sean consistentes y más pequeñas, corrige un poco el corte (aunque no completamente). Sin embargo, la textura todavía está muy distorsionada. Estoy trabajando en la sugerencia de @nathan a continuación, que al menos permitirá una subdivisión mucho más fina.
Lewy Blue
1
@Looeee ¿Podría pasar su código, por favor? Estoy muy interesado en este campo de gráficos
x-rw
Sí, puedes encontrar mi código aquí: github.com/looeee/blackthread-heroku/tree/master/assets/js/src/… Y la versión en vivo: blackthread.io/experiments/eschersketch Honestamente, hace mucho que no busqué en esto que no puedo recordar en qué parte del código están las funciones que resuelven esto, pero si tienes problemas para entenderlo, mándame otro comentario aquí y lo echaré un vistazo.
Lewy Blue

Respuestas:

8

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:

ingrese la descripción de la imagen aquí

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.

Nathan Reed
fuente
1
Gracias, intentaré esto. Fue uno de mis métodos originales para construir el polígono, aunque matemáticamente mucho más complejo, así que elegí el método más simple. Le daré otra oportunidad e informaré.
Lewy Blue
Gracias. Pude modificar su sugerencia en una solución. Vea mi edición arriba.
Lewy Blue