Isto é conseguido através da interpolação baricêntrica .
Primeiro, encontramos as coordenadas baricêntricas de . As coordenadas barocêntricas representam quanto peso cada vértice contribui para o ponto e pode ser usado para interpolar qualquer valor que seja conhecido nos vértices na face de um triângulo.P
Considere os três triângulos internos , e .P B C P C AA B PPB CPCUMA
Podemos dizer que a coordenada barêntrica, ou o peso do vértice no ponto é proporcional à razão entre a área do triângulo interno e a área de todo o triângulo .P P B C A B CUMAPPB CA B C
Isso é intuitivamente evidente se considerarmos que, à medida que aproxima de o triângulo aumenta e os outros dois se tornam menores.A P B CPUMAPB C
Também intuitivamente evidente deve ser que a soma das coordenadas baricêntricas de um ponto dentro de um triângulo sempre seja igual a . Portanto, basta encontrar apenas duas das coordenadas para derivar a terceira.1
O método para calcular as coordenadas barricêntricas é:
B a r yUMAB a r yBB a r yC= ( By- Cy) ( Px- Cx) + ( Cx- Bx) ( Py- Cy)( By- Cy) ( Ax- Cx) + ( Cx- Bx) ( Ay- Cy)= ( Cy- Ay) ( Px- Cx) + ( Ax- Cx) ( Py- Cy)( By- Cy) ( Ax- Cx) + ( Cx- Bx) ( Ay- Cy)= 1 - B a r yUMA- B um r yB
A derivação e o raciocínio são explicados no artigo da Wikipedia .
Depois de ter coordenadas, é possível determinar as coordenadas de textura de interpolando os valores nos vértices usando as coordenadas bariêntricas como pesos:P
Pvc v= B a r yUMA⋅ Avc v+ B a r yB⋅ Bvc v+ B a r yC⋅ Cvc v
O raciocínio também é explicado muito bem nesta apresentação.
Veja também esta pergunta para métodos eficientes de computação.