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.

Était-ce utile?

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:

Tangente à courbe de Bézier

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top