Como mapear a textura quadrada para o triângulo?

13

Eu quero encontrar as coordenadas de textura para o ponto P. Eu tenho os vértices do triângulo e suas coordenadas uv correspondentes.

Os números nos pequenos quadrados na textura representam valores de cores.

Quais são as etapas para calcular as coordenadas uv de P?

insira a descrição da imagem aqui

john john
fonte
Há uma transformação afim que mapeará cada canto para sua coordenada de textura; você pode usá-la para mapear P para seu uv.
ratchet freak
@ratchetfreak você poderia me fornecer um link plz?
Joao joao
Há uma boa descrição de como fazer o cálculo do ponto de interseção, bem como o cálculo do cordão bariátrico de uma só vez neste artigo . Isso significa essencialmente transformar o triângulo.
joojaa

Respostas:

14

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 AUMABPPBCPCUMA

insira a descrição da imagem aqui

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 CUMAPPBCUMABC

Isso é intuitivamente evidente se considerarmos que, à medida que aproxima de o triângulo aumenta e os outros dois se tornam menores.A P B CPUMAPBC

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

BumaryUMA=(By-Cy)(Px-Cx)+(Cx-Bx)(Py-Cy)(By-Cy)(UMAx-Cx)+(Cx-Bx)(UMAy-Cy)BumaryB=(Cy-UMAy)(Px-Cx)+(UMAx-Cx)(Py-Cy)(By-Cy)(UMAx-Cx)+(Cx-Bx)(UMAy-Cy)BumaryC=1-BumaryUMA-BumaryB

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

Pvocêv=BumaryUMAUMAvocêv+BumaryBBvocêv+BumaryCCvocêv

O raciocínio também é explicado muito bem nesta apresentação.

Veja também esta pergunta para métodos eficientes de computação.

Rotem
fonte
Eu permaneço um erro no ? O primeiro termo deve ser ou estou errado? BumaryB(UMAy-Cy)
Joojaa
@joojaa Acho que não. É o mesmo no artigo da Wikipedia e parece correto a partir de um cálculo de teste que fiz.
Rotem
ah, então é , pode ser bom salientar, pois você pré-calcularia . -(UMAy-Cy)UMACy=(UMAy-Cy)
Joojaa
1
@joojaa Todo o denominador e alguns dos termos do numerador pode ser pré-calculada para cada triângulo, muito poucos dos termos dependem . Adicionei um link para uma pergunta que trata dos métodos de cálculo. Nesta fórmula, pensei que seria melhor manter a notação simples e uniforme, em vez de eficiente. P
Rotem