Calculer l'horizon d'une face courbe? - Non extrema
-
05-09-2019 - |
Question
Je dois trouver les 2 points du horizon visuel , d'une face incurvée.
Je:
- XYZ des 4 points d'angle
- XYZ des 2 points de Bézier de bord courbe
Et je dois calculer soit:
- XY des 2 points d'horizon
- XYZ des 2 points d'horizon
Remarque: Je suis une solution dernière temps j'ai posé cette question, mais il ne trouve le extrema des courbes, pas les Points d'horizon , qui change en fonction de la position et la rotation des deux courbes par rapport à l'autre.
La solution
Vous ne dites pas comment votre surface est définie, seulement qu'il est délimité par deux courbes de Bézier. Il y a beaucoup de façons de construire une telle surface, et chaque façon de construire aurait un horizon différent. Donc, cette réponse va être devinettes.
L'horizon consiste en ces points de la surface où le vecteur de la caméra au point est tangente à la surface, comme indiqué ici:
Une courbe de Bézier possède équation paramétrique
B ( t ) = (1 - t ) 2 P 0 + 2 (1 - < em> t ) t P 1 + t 2 P 2
différenciant que par rapport à t nous donne la tangente à la courbe:
B '( t ) = 2 ( t - 1) P 0 + 2 (1 - 2 t ) P 1 + 2 t P 2
et ceci est parallèle au vecteur de la caméra (à l'origine) de la courbe si
B ( t ) x B '( t ) = 0
Résoudre cela pour t et vous aurez le point sur la courbe à l'horizon. Comment vous pouvez l'étendre à l'horizon pour toute la surface dépend de la façon dont votre surface est construite. (Peut-être que vous pouvez juste trouver les points d'horizon pour les courbes à chaque extrémité de la surface et les rejoindre avec une ligne droite?)
Autres conseils
Est-ce que ça marche d'abord tourner les courbes afin que la connexion entre les points d'angle est horizontal, puis en calculant extrema?
Pour tester visuellement, vous pouvez faire pivoter votre image par exemple d'environ 150 degrés:
image pivotée http://www.freeimagehosting.net/uploads/ad502509e9.png
Notez extrema de cette courbe est pas exactement où vous le voulez, mais cela pourrait être causé par plusieurs facteurs, par exemple la façon dont vous avez marqué les points d'horizon ne semble pas être que exact.
Qu'est-ce que vous cherchez est en fait appelé silhouette , pas un horizon.
La méthode la plus simple de le faire consiste à trouver la frontière entre les parties de surface dans laquelle la normale est dirigée vers la caméra (produit scalaire est négatif) et les parties de surface dans laquelle la normale est dirigée loin de la caméra (produit scalaire est positif) .
Avec un maillage triangulaire, vous pouvez le faire directement en utilisant les Normales. avec NURBS vous pouvez probablement trouver une formule fermée qui fait cela.