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
È 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.
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 PointV0
- derivataP0
P1
- end pointV1
- derivatoP1
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.
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.