Calcola l'orizzonte di una faccia curva? - Non extrema


5

Devo trovare i 2 punti dell'orizzonte visivo , di una faccia curva.

ho:

  • XYZ dei 4 punti d'angolo
  • XYZ dei 2 punti di margine di Bezier curve

e ho bisogno di calcolare sia:

  • XY dei 2 punti orizzonte
  • XYZ dei 2 punti orizzonte

Nota: ho ottenuto una soluzione del last time ho fatto questa domanda, ma trovato il estremi delle curve, non i punti orizzonte, che cambia in base alla posizione unica e rotazione di entrambe le curve l'una rispetto all'altra.

  0

I punti XYZ noti sono ciò che viene calcolato DOPO la proiezione. Quindi non sia di questo. 22 feb. 092009-02-22 11:05:23

  0

Inoltre, la "fotocamera" del mondo 3D è a 0,0,0 XYZ che punta a un angolo di 0,0,0 XYZ. In altre parole, i punti XYZ sono pronti per il calcolo, la "fotocamera" non ha bisogno di essere infastidita. 22 feb. 092009-02-22 11:06:37

  0

Bel indizio visivo. Ti interessa divulgare quale software è stato utilizzato per crearlo? 22 feb. 092009-02-22 11:13:49

2

Non si dice come viene definita la superficie, ma solo che è delimitata da due curve di Bézier quadratiche. Ci sono molti modi per costruire una tale superficie, e ogni modo di costruirlo avrebbe un orizzonte diverso. Quindi questa risposta sarà una supposizione.

L'orizzonte è costituito da tali punti sulla superficie dove il vettore dalla telecamera al punto è tangente alla superficie, come illustrato di seguito:

Tangent to Bézier curve

una curva di Bezier quadratica trovi equazione parametrica

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

differenziando che rispetto a t ci dà la tangente alla curva:

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

e questo è parallelo al vettore dalla telecamera (all'origine) alla curva se

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

Risolvi questo per t e avrai il punto sulla curva all'orizzonte. Come puoi estenderlo all'orizzonte per l'intera superficie dipende da come viene costruita la tua superficie. (Forse puoi solo trovare i punti di orizzonte per le curve a ciascuna estremità della superficie e unirli con una linea retta?)


2

Funziona per prima cosa ruotare le curve in modo che la connessione tra i punti angolari sia orizzontale e quindi calcolando gli estremi?

Per verificare visivamente, è possibile ruotare l'immagine esempio di circa 150 gradi:

Rotated image http://www.freeimagehosting.net/uploads/ad502509e9.png

nota gli estremi di questa curva non è esattamente dove si desidera, ma questo potrebbe essere causato da diversi fattori, ad esempio il modo in cui hai segnato i punti dell'orizzonte non sembra essere quello esatto.


1

Quello che stai cercando in realtà è chiamato un silhouette, non un orizzonte.
Il metodo più semplice per fare ciò è trovare il confine tra le parti di superficie in cui il normale è diretto verso la telecamera (il prodotto punto è negativo) e le parti di superficie in cui il normale è diretto lontano dalla fotocamera (il prodotto punto è positivo).

Con una rete a triangolo è possibile farlo direttamente utilizzando le normali. con NURBS puoi probabilmente trovare una formula chiusa che fa questo.