¿Cómo mapear la textura cuadrada al triángulo?

13

Quiero encontrar las coordenadas de textura para el punto P. Tengo los vértices del triángulo y sus correspondientes coordenadas uv.

Los números en los cuadrados pequeños en la textura representan valores de color.

¿Cuáles son los pasos para calcular las coordenadas uv de P?

ingrese la descripción de la imagen aquí

John John
fuente
Hay una transformación afín que asignará cada esquina a su coordenada de textura, puede usarla para asignar P a su uv.
Ratchet Freak
@ratchetfreak ¿podría proporcionarme un enlace por favor?
John John
Hay una buena redacción sobre cómo hacer el cálculo del punto de intersección, así como el cálculo del cordón baricéntrico de una vez en este documento . Esto esencialmente equivale a transformar el triángulo.
joojaa

Respuestas:

14

Esto se logra mediante interpolación baricéntrica .

En primer lugar, nos encontramos con las coordenadas de barycentric . Las coordenadas barcéntricas representan la cantidad de peso que cada vértice aporta al punto, y se pueden usar para interpolar cualquier valor que se conozca en los vértices a través de la cara de un triángulo.P

Considere los 3 triángulos interiores , P B C y P C A .ABPPBCPCA

ingrese la descripción de la imagen aquí

Podemos decir que la coordenada barcéntrica, o el peso del vértice en el punto P es proporcional a la proporción del área del triángulo interno P B C al área del triángulo completo A B CAPPBCABC .

Esto es intuitivamente evidente si consideramos que a medida que acerca a A, el triángulo P B C se hace más grande y los otros dos se hacen más pequeños.PAPBC

1

El método para calcular las coordenadas barcéntricas es:

BaryA=(ByCy)(PxCx)+(CxBx)(PyCy)(ByCy)(AxCx)+(CxBx)(AyCy)BaryB=(CyAy)(PxCx)+(AxCx)(PyCy)(ByCy)(AxCx)+(CxBx)(AyCy)BaryC=1BaryABaryB

La derivación y el razonamiento se explican en el artículo de Wikipedia .

P

Puv=BaryAAuv+BaryBBuv+BaryCCuv

El razonamiento también se explica muy bien en esta presentación.

También vea esta pregunta para métodos eficientes de computación.

Rotem
fuente
BaryB(AyCy)
@joojaa, no lo creo. Es lo mismo en el artículo de Wikipedia, y parece correcto de un cálculo de prueba que hice.
Rotem
(AyCy)ACy=(AyCy)
1
P