Calcule o horizonte de uma face curva? - Não é extrema
-
05-09-2019 - |
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.
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:
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 ??strong>, 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.