Pergunta

Eu preciso encontrar os 2 pontos do horizonte visual , de uma face curva.

Eu tenho:

  • XYZ dos 4 pontos de canto
  • XYZ da borda curvada 2 Bezier pontos

E eu preciso calcular quer:

  • XY dos 2 pontos horizonte
  • XYZ dos 2 pontos horizonte

Nota: Eu tenho uma solução a última tempo eu fiz esta pergunta, mas só encontrou o extrema das curvas, e não o pontos horizonte , que muda de acordo com a posição e rotação de ambas as curvas em relação ao outro.

Foi útil?

Solução

Você não diz como a sua superfície é definida, só que ele é delimitada por duas curvas Bézier quadrática. Há muitas maneiras de construir a superfície tal, e cada forma de construir que teria um horizonte diferente. Assim, esta resposta vai ser adivinhação.

O horizonte consiste naqueles pontos sobre a superfície em que o vector a partir da câmara para o ponto é tangente à superfície, como mostrado a seguir:

Tangente a Bézier curva

A curva Bézier quadrática tem paramétrico equação

B ( t ) = (1 - t ) 2 P 0 + 2 (1 - < em> t ) t P 1 + t 2 P 2

diferenciação que, com relação a t nos dá a tangente à curva:

B '( t ) = 2 ( t - 1) P 0 + 2 (1 - 2 t ) P 1 + 2 t P 2

e esta é paralelo com o vetor a partir da câmara (na origem) para a curva se

B ( t ) × B '( t ) = 0

Resolva isso para t e você vai ter o ponto da curva no horizonte. Como você pode estender isso para o horizonte de toda a superfície depende de como sua superfície é construída. (Talvez você pode apenas encontrar os pontos de horizonte para as curvas em cada extremidade da superfície e juntá-los com uma linha reta?)

Outras dicas

Será que funciona a primeira rotação as curvas de modo que a conexão entre os pontos de canto é horizontal e, em seguida, calcular a extrema?

Para testá-lo visualmente, você pode girar sua imagem exemplo em cerca de 150 graus:

imagem rodada http://www.freeimagehosting.net/uploads/ad502509e9.png

Observe a extrema desta curva não é exatamente onde você quiser, mas isso pode ser causada por vários fatores, por exemplo, a maneira como você marcou os pontos horizonte não parece ser que exato.

O que você está procurando é realmente chamado de silhueta , e não um horizonte.
O método mais simples de fazer isso é encontrar o limite entre as partes da superfície em que o normal é dirigida para a câmera (produto escalar é negativo) e as partes de superfície em que o normal é dirigido longe da câmera (produto escalar é positivo) .

Com um triângulo de malha que você pode fazer isso diretamente usando as normais. com NURBS você provavelmente poderá encontrar uma fórmula fechada que faz isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top