Pergunta

Eu sou processamento de textura quadriláteros a partir de um ortográfico da perspectiva e gostaria de simular a 'profundidade' modificando UVs e as posições dos vértices dos quadriláteros quatro pontos (superior esquerdo, superior direito, inferior esquerdo, inferior direito).

Eu descobri que se eu fazer a parte superior esquerda e inferior direita cantos y posição de ser o mesmo, não recebo linear 'inclinação', mas sim uma pervertida, onde a textura cobrindo a parte superior do triângulo (que faz até o quádruplo) parece esmagado, enquanto a parte inferior triângulos textura parece normal.

Eu posso mudar de UVs, qualquer um dos quatro pontos sobre o quad (mas apenas no espaço 2D é projecção ortográfica mesmo assim, espaço 3D, não importa muito).Então, basicamente, eu estou tentando simular perspectiva bidimensional quad na projecção ortográfica, qualquer idéias?É matematicamente possível/viável?

idealmente, o que eu gostaria é uma situação onde eu posso definir um x/y rotação, bem como uma virtual z 'posição' (que simula a profundidade z) através de uma função e vê-lo internamente calclate os cargos/uv para criar o efeito 3D.Parece que isso deve ser matemática, onde um conjunto de 2D transformações podem ser aplicadas para cada canto do quadrilátero para simular a profundidade, eu só não sei como fazer isso acontecer.Eu acho que ele requer de trigonometria ou algo assim, eu estou tentando crise a matemática, mas não fazer muito progresso.

aqui está o que eu quero dizer:

alt text

Superior esquerda é o cartão de centro é o cartão com uma rotação em y de X graus e direito mais é um cartão com um x e y rotação de diferentes graus.

Foi útil?

Solução

Para calcular as coordenadas 2D, dos cantos, basta escolher as coordenadas em 3D e aplicar a perspectiva 3D de equações :

Cartão Original de canto (x,y,z)

Aplicar uma rotação ( por multiplicação de matrizes ) que obtiver ( x',y',z')

Aplicar uma projeção em perspectiva ( escolher alguns câmara de origem, o sentido e o campo de visão ) Para a maioria dos caso mais simples é :

  • x" = x' / z
  • y" = y' / z

O maior problema agora é a texturização usado para obter as coordenadas de textura a partir de coordenadas de pixel :

A maneira correta para você é usar um homographic transformação do formulário :

  • U(x,y) = ( ax + cy + e ) / (gx + hy + 1)
  • V(x,y) = ( bx + dy + f ) / (gx + hy + 1)

O que é facto é que o resultado da perpective equações aplicadas a um avião.

a,b,c,d,e,f,g,h são calculados de modo que ( U,V [0..1] ) :

  • U(top",a esquerda") = (0,0)
  • U(top",o direito") = (0,1)
  • U(inferior",a esquerda") = (1,0)
  • U(inferior",direito") = (1,1)

Mas o seu processamento 2D quadro, provavelmente, usa, em vez de uma interpolação bilinear :

  • U( x , y ) = a + b * x + c * y + d * ( x * y )
  • V( x , y ) = e + c * x + d * y + h * ( x * y )

Nesse caso, você obtém um mau resultado olhando.

E é ainda pior se o processador divide o quadrilátero em dois triângulos !

Então, eu só vejo duas opções :

  • usar um renderizador 3D
  • calcular a texturização a si mesmo se tiver apenas algumas imagens e não uma animação em tempo real.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top