2009-06-23 9 views
9

Come posso disegnare curve Hermite utilizzando OpenGL, ci sono delle funzioni incorporate? Ho visto alcuni esempi on-line che mostrano come utilizzare gli analizzatori per disegnare curve di Bezier ma non sono riusciti a trovare alcuna informazione per le curve Hermite.Disegno di curve di eremita in OpenGL

risposta

1

È possibile convertire qualsiasi curva di Hermite in una curva di Bezier e quindi disegnarla. Sono semplicemente definiti utilizzando due basi diverse in C3. Google non è stato molto utile, e sembra che questa sarebbe una domanda comune, quindi dovremmo provare a rendere la risposta StackOverflow definitiva, magari con qualche codice di esempio. Tornerò domani con altro.

6

Come menzionato da Steven, è possibile convertire una curva cubica di Hermite in una curva di Bezier cubica. In realtà è abbastanza semplice.

Una curva Hermite cubica tipica è definita da due punti e due vettori:

  • P0 - Start Point
  • V0 - derivata P0
  • P1 - end point
  • V1 - derivato P1

La conversione ad un Bézier cubica è semplicemente:

B0 = P0 
B1 = P0 + V0/3 
B2 = P1 - V1/3 
B3 = P1 

Si può quindi tracciare la curva di Bezier utilizzando e valutatore o qualsiasi altro modo lo si desidera.

11

Lascia che il vettore dei punti di controllo per Bezier sia [b0 b1 b2 b3] e quelli per il tuo Hermite siano [h0 h1 v0 v1] (v0 e v1 sono la derivata/tangente nei punti h0 e h1). Quindi possiamo usare una forma matriciale per mostrare le conversioni:

Hermite di Bezier

 
[b0] = 1 [ 3 0 0 0] [h0] 
[b1] - [ 3 0 1 0] [h1] 
[b2] 3 [ 0 3 0 -1] [v0] 
[b3]  [ 0 3 0 0] [v1] 

(questo è esattamente come nella risposta di Naaff, sopra).

Bezier a HERMITE

 
[h0] = [ 1 0 0 0] [b0] 
[h1] [ 0 0 0 1] [b1] 
[v0] [-3 3 0 0] [b2] 
[v1] [ 0 0 -3 3] [b3] 

Quindi, in forma matriciale questi sono forse leggermente più complessa di quanto necessario (dopo tutto il codice di Naaff era breve e punto). È utile, perché ora possiamo andare molto oltre gli Hermiti.

In particolare possiamo inserire l'altra classica curva parametrica cubica cardinale: la curva Catmull-Rom. Ha punti di controllo [c_1 c0 c1 c2] (a differenza delle curve di Bezier, la curva va dal secondo al terzo punto di controllo, da qui la numerazione abituale da -1). Le conversioni di Bezier sono quindi:

Catmull-Rom di Bezier

 
[b0] = 1 [ 0 6 0 0] [c_1] 
[b1] - [-1 6 1 0] [c0] 
[b2] 6 [ 0 1 6 -1] [c1] 
[b3]  [ 0 0 6 0] [c2] 

Bezier di Catmull-Rom

 
[c_1] = [ 6 -6 0 1] [b0] 
[c0] [ 1 0 0 0] [b1] 
[c1] [ 0 0 0 1] [b2] 
[c2] [ 1 0 -6 6] [b3] 

posso fare il Hermite alla coppia di Catmull-Rom troppo, ma' raramente utilizzato, poiché Bezier è normalmente la rappresentazione primaria.