Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision...

Post on 02-Oct-2020

1 views 0 download

Transcript of Vorlesung „Ct fik“Computergrafik“ T. Grosch€¦ · Subdivision (Unterteilung)Subdivision...

(10) Splines

VorlesungC t fik“„Computergrafik“

T. Grosch

Kurven: Motivation 1Kurven: Motivation 1

Bisher haben wir die Objekte der Welt – oder genauerBisher haben wir die Objekte der Welt – oder genauer deren Oberflächen – durch Dreiecke bzw. Polygone angenähert.gOftmals benötigt man aber kompliziertere Kurven oder Flächen

Schriftzeichen Automobilbau

T. Grosch - 2 -

Kurven: Motivation 2Kurven: Motivation 2Gegeben ist eine Menge von Punkten (z B Messwerte)Gegeben ist eine Menge von Punkten (z.B. Messwerte)

yvyv

xvxv

Interpolation Approximation

T. Grosch - 3 -

KurvenbeschreibungKurvenbeschreibungImplizit

yv

Implizit

xvrt

222 ryx =+

0222 + ryx(unbekannte Lösungsmenge)

Explizit

x0=−+ ryx

Explizit

(eingeschränkter Def.bereich)

22 xry −±=

Parametrisch

( ) ( ) ( ) ( ) ]2,0[,sin,cos π∈⋅=⋅= ttrtytrtx

(flexibel und einfach handhabbar)

( ) ( ) ( ) ( ) ]2,0[,sin,cos π∈ttrtytrtx

T. Grosch - 4 -

Simples Beispiel (2D)Simples Beispiel (2D)

Lineare Interpolation zwischen 2 PunktenLineare Interpolation zwischen 2 Punkten, parametrische Darstellung

( ) ( ) ]1,0[,1 10 ∈⋅+−= tPtPttP

1P

)1( t

t

0P )1( t−

)(tP

T. Grosch - 5 -

Simple Beispiele (3D)Simple Beispiele (3D)Interpolation einer Fläche 01PInterpolation einer Fläche durch bilineare Patches

Zuerst Interpolation über u

01

( )′

P ′′

Dann über v

11Pv( )( ) 1101

1000

11

PuPuPPuPuP⋅+⋅−=′′⋅+⋅−=′

Dann über v

Z f t

( ) PvPvvuP ′′⋅+′⋅−= 1),(

Zusammengefasst( ) ( ) ( )

( ) ( ) 10

00

111,

⋅−⋅+⋅−⋅−=PvuPvuvuP

00P 10PuP′

( ) ( )( ) ( )

2

01

11

]10[)(

1

⋅⋅−+⋅⋅+

vu

PvuPvu

]1,0[),( ∈vu

T. Grosch - 6 -

Subdivision (Unterteilung)Subdivision (Unterteilung)Gegeben seien die

1P 2P1,1PGegeben seien die Liniensegmente (rechts)Man unterteilt jede Kante ( B P P d P P ) B i 2 P

P(z.B. P0P1 und P1P2) z.B. in 2 gleiche TeileDie neue Kante (P0 1P1 1) wird

1,0P

( 0,1 1,1)ebenfalls in der Mitte unterteilt und ein neuer Punkt P generiert

0Psubdivide (rek, p0, p1, p2)P generiert

Das ganze wird für die neuen Kanten rekursiv wiederholt.

{if (rek >= max_rek){

Zeichne Linien (p0, p1, p2);Abbruch;

Das Ergebnis ist eine geglättete Kurve

;}p01 = (p0+p1)/2.0; p11 = (p1+p2)/2.0; p = (p01+p11)/2.0subdivide(rek+1 p0 p01 p);subdivide(rek+1, p0, p01, p);subdivide(rek+1, p, p11, p2);

}

T. Grosch - 7 -

Beispiel1P 2P1,1P

Beispiel

1,0PP

1. Rekursion:

0P

2P

P2P

10P1,1P

1P

P2 Rekursion:

1P

10P

1,1P

P

0P1,02. Rekursion:

0P

1,0P

T. Grosch - 8 -

Wiederholte HalbierungWiederholte Halbierung

Was passiert mit der Kurve, wenn wir die Kanten nicht halbieren sondern dritteln ?

T. Grosch - 9 -

Halbierung/Drittelung ?Halbierung/Drittelung ?

HalbierungHalbierung

Drittelungdi l i h K

g…die gleiche Kurve

T. Grosch - 10 -

Mathematisch: 1 RekursionMathematisch: 1. Rekursion

1P 2P11P ( )1 PPP1P 2P1,1

P

( )101,0 21 PPP +=

11,0P

P( )211,1 2

1 PPP +=

0P ( )+= 1,11,021 PPP

⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ += 2110 2

121

21

21

21

21 PPPP

T. Grosch - 11 -

Mathematisch: 2 Rekursion (links)Mathematisch: 2. Rekursion (links)2P1P( )1 PPP

10P

2

bP21P

1( )

( )100

1,00

21

212

PPP

PPPa

⎟⎠⎞

⎜⎝⎛ ++=

+=

P

1,0

aP41P

10 41

43

22

PP +=

⎠⎝

0P

( )+=1 PPP b

( )211,021 PPPb +=

( )

⎟⎠⎞

⎜⎝⎛ ++++=

+

21010 81

84

83

41

43

212

PPPPP

PPP ba

( ) 211010

14321

21

21

21

21

21

21

21 PPPPPP ⎟

⎠⎞

⎜⎝⎛

⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ +++=

⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ += 2110 4

143

41

41

43

43 PPPP210 8

184

83 PPP ++=

T. Grosch - 12 -

Was sagt uns das ? ⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ += 211041

131133 PPPPPWas sagt uns das ?

PP PP

⎟⎠

⎜⎝

⎟⎠

⎜⎝ 211041 444444

2P

P

1P 2P1P )1( t− t

1,0PbP

P

21P)

41( =tP

t t

aP41P )

4(

)1( t−

)1( t−

0P0P

Durch diesen Rekursionsschritt erzeugen wir den gleichen Wert wie für t=1/4.

T. Grosch - 13 -

Genauere BetrachtungGenauere Betrachtung

⎟⎞

⎜⎛

⎟⎞

⎜⎛

⎟⎞

⎜⎛ 1111111 2P1P

⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ +=⎟

⎠⎞

⎜⎝⎛ = 2110 2

121

21

21

21

21

21 PPPPtP

⎞⎛⎞⎛⎞⎛ 1311331 21P43P

⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ +=⎟

⎠⎞

⎜⎝⎛ = 2110 4

143

41

41

43

43

41 PPPPtP

Analog für 2 Rekursion (rechts):41P

21

⎟⎠⎞

⎜⎝⎛ ++⎟

⎠⎞

⎜⎝⎛ +=⎟

⎠⎞

⎜⎝⎛ = 2110 4

341

43

43

41

41

43 PPPPtP

Analog für 2. Rekursion (rechts):

0P ( )⎠⎝⎠⎝⎠⎝ 4444444 0

Verallgemeinerung liefert eine appoximierte Parameterkurve

( ) 00 PtP ==

( ) 21 PtP ==

( ) ( ) ( )( ) ( )( )2110 111 PtPttPtPtttP ⋅+⋅−⋅+⋅+⋅−−=

T. Grosch - 14 -

Quadratische Bézier-KurvenQuadratische Bézier-Kurven

Damit haben wir die quadratischen Bézier-KurvenDamit haben wir die quadratischen Bézier-Kurven hergeleitet.Prinzip:Prinzip:

Gegeben sind 3 Punkte („Kontrollpunkte“)Damit haben wir ein einfaches Verfahren, wie eine parametrisierte Kurve durch die Punkte approximiert wirdDie Kurve geht durch Anfangs- und Endpunkt

( ) ( ) ( )( ) ( )( )2110 111 PtPttPtPtttP ⋅+⋅−⋅+⋅+⋅−−=

Umformung liefert:

( ) ( ) ( ) 22

102 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−=

Standardform der quadratischen Bézier-KurvenStandardform der quadratischen Bézier Kurven

T. Grosch - 15 -

GewichtungsfunktionenGewichtungsfunktionen( ) ( ) ( ) 2

210

2 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−=

Für jeden Wert von t im Bereich [0,1] wird eindeutig i P kt P d fi i t

1ein Punkt P definiert„Abhängig vom Wert von t nimmt man ein bisschen von

2t

( )tt 12

( )21 t−

P0, von P1 und schließlich von P2“Gewichtungsfunktionen

( )tt −⋅⋅ 12

GewichtungsfunktionenPositivSumme der G f f

t0 1

0Gewichtungsfunktionen für jedes t gleich 1

1

T. Grosch - 16 -

InterpretationInterpretation

Gewicht von P0 Gewicht von P2

2P1P1

Gewicht von P0

Gewicht von P1

Gewicht von P2

21P43P 2t

( )12 tt

( )21 t−

41P( )212 tt −⋅⋅

0P t0 1

00 0 1

( ) ( ) ( ) 22

102 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−=

T. Grosch - 17 -

Tangente an Start-/EndpunktTangente an Start-/Endpunkt

PP( ) ( ) ( ) 22

102 121 PtPttPttP ⋅+⋅−⋅⋅+⋅−= 2P1P

( ) ( ) ( ) 210 221212' PtPtPttP ⋅+⋅−⋅+⋅−⋅=

(Tangenten hier aus Pl t ü d k

:0t = 1t =

Tangente in P0: Tangente in P2:Platzgründen zu kurz gezeichnet, in der Zeichnung soll nur die Richtung verdeutlicht

d )

( ) ( )012':0

PPtPt

−⋅==

( ) ( )122'1

PPtPt

−⋅==

0Pwerden ….)

Ergebnis: die Richtungen der Tangenten an Start-/Endpunkt sind durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.

T. Grosch - 18 -

Eigenschaften der Bézier-KurvenEigenschaften der Bézier-Kurven1 Konvexe Hülle PP1. Konvexe Hülle

Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte

2P1P

Kontrollpunkte2. Start-/Endpunkte

… liegen auf der Kurve3. Tangenten

… an Start-/Endpunkten sind durch diesind durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.

0Pp g g

4. Variation Diminishing PropertyDie Anzahl der Schnittpunkte einer Gerade mit dem Kontrollpolygon ist nie kleiner als die Anzahl der Schnittpunkte mit der Kurve

T. Grosch - 19 -

Anzahl der Schnittpunkte mit der Kurve (ohne Beweis)

Kubische Bézier-KurvenKubische Bézier-Kurven

P P2P1P

20P

1,1P

21PP

1,1P

P

2P1P

10P

2,0

)(tP12P

2,1

)(tP

1,2P2,1P

1,0P

P

1,2P

1,0P 2,0P

P0P 3P

5.0=t 0P 3P25.0=t

( ) ( ) ( ) ( ) 33

22

12

03 13131 PtPttPttPttP ⋅+⋅−+⋅−+⋅−=

T. Grosch - 20 -

Kubische Bézier-KurvenKubische Bézier-KurvenBei 4 Kontrollpunkten 3t( )31 t−

1Bei 4 Kontrollpunkten ergeben sich Gewichtungsfunktionen 3. Grades (kubische Bézier

t

( )213 tt −

( )1 t−

( )tt −13 2Grades (kubische Bézier-Kurven)Allgemein: die Anzahl der

( )13 tt ( )tt 13

Kontrollpunkte legt den Grad der Polynome fest (Grad der Polynome ist Anzahl der

1 Die Kurve liegt innerhalb der konvexen

t0 1

0

yKontrollpunkte minus 1)Alle anderen Eigenschaften gelten auch hier:

1. Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte

2. Start-/Endpunkte liegen auf der Kurve3 Tangenten an Start /Endpunkten sindgelten auch hier: 3. Tangenten an Start-/Endpunkten sind

durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt.

T. Grosch - 21 -

1P 1P2P 2P

1P

1P 1P

0P 0P 0P2P

2P 2P

3P

3P1 12 23P

1P0P 0P

0P2P 3P 3P4P

T. Grosch - 22 -

Bernstein-PolynomeBernstein-PolynomeBézier-Kurven lassen sich n = 3: ( )330 1 tB −=Bézier Kurven lassen sich allgemein auch so darstellen

n 3:

( ) ( )∑n

( )( )( )2

32

23,1

3,0

13

13

1

ttB

ttB

tB

−=

−=

Grad n des Polynoms = All i B t i

( ) ( )∑=

⋅=i

ini PtBtP0

,

( )3

3,3

3,2

tB =

Grad n des Polynoms = Anzahl Kontrollpunkte – 1

Allgemein: „Bernstein-Polynome“

n⎞⎛n = 2: ( )( )2,1

22,0

121

ttBtB−⋅⋅=

−= ( ) inini tt

in

B −−⋅⋅⎟⎠

⎞⎜⎝

⎛= 1,

⎞⎛22,2 tB =

( )!!!

inin

in

−=⎟

⎞⎜⎝

10!0 0 ==

T. Grosch - 23 -

ZusammenfassungZusammenfassungBézier-Kurven sind eine Grad n des Polynoms = AnzahlBézier Kurven sind eine Möglichkeit, stetige Kurven aus eine Menge von Kontrollpunkten zu

Grad n des Polynoms Anzahl Kontrollpunkte – 1Eigenschaften der Bézier-KKontrollpunkten zu

generierenKurven

1. Die Kurve liegt innerhalb der konvexen Hülle der Kontrollpunkte

2 Start-/Endpunkte liegen auf der Kurve( ) ( )∑ ⋅=n

ii PtBtP

Als Gewichtungsfunktionen werden Bernstein-Polynome

2. Start /Endpunkte liegen auf der Kurve3. Tangenten an Start-/Endpunkten sind

durch die Verbindungen erster/zweiter bzw. vorletzter/letzter Kontrollpunkt festgelegt

( ) ( )∑=i

ini PtBtP0

,

werden Bernstein-Polynome verwendet

festgelegt.

Eigenschaften der Bernstein-Polynome

( ) ini ttn

B −⎟⎞

⎜⎛ 1 1. Im Wertebereich t∈[0,1] positiv

2. Die Summe der Werte für alle t im Wertebereich ist 1.

( )ni tti

B −⋅⋅⎟⎠

⎜⎝

= 1,

( )∑n

( )∑=

∈∀=i

ni ttB0

, ]1,0[1

T. Grosch - 24 -

Rekursive Darstellung ( ) ( )∑ ⋅=n

ii PtBtPRekursive Darstellung

Die Bernstein-Polynome lassen sich sehr gut rekursiv

( ) ( )∑=i

ini PtBtP0

,

( )1 + BtBtB

Die Bernstein-Polynome lassen sich sehr gut rekursiv definieren

( ) 1,11,, 1 −−− ⋅+⋅−= ninini BtBtB

( )22,0 1 tB −=

( )33,0 1 tB −=( )t−1

t

( )ttB −⋅⋅= 122,1

( )23,1 13 ttB −=( )tB −= 11,0

10,0 =B ( )t−1

t

( )t−1

t( )t−1

t,

222 tB =

( )ttB −= 13 23,2tB =1,1

, t

( )t−1

t

t

( )t−12,2 tB

33,3 tB =

t

Lineare Interpolation einer linearen Interpolation einer…Lineare Interpolation einer linearen Interpolation einer…

T. Grosch - 25 -

Rekursive Berechnung (de Casteljau)Rekursive Berechnung (de Casteljau)Genauso lassen sich die Dieser Algorithmus von deGenauso lassen sich die Punkte auf der Kurve sehr gut rekursiv berechnen

Dieser Algorithmus von de Casteljau ist nichts anderes, als das bereits hergeleitete VerfahrenVerfahren

( ) 1,11,, 1 −+− ⋅+⋅−= kikiki PtPtP00P

02P01P 1,1P

1,0P0,0

PP( )t−1

( )t−1

t

0,2P0,1P2,0P

1,1

2,1P

1,1P0,1P

P

2,0P

P

( ) 3,0PtP =( )t−1

t

t

( )t−1

( )t−1

t 1,0P)(tP

1,2P

1,2P

0,2P

P

2,1Pt ( )t−1

t00P 0,3P

500,3P 0,0 5.0=tT. Grosch - 26 -

Implementierung de CasteljauImplementierung de CasteljauRekursiv IterativRekursivDe-casteljau( anz, P[], t){If (anz<2)

IterativDe-casteljau( anz, P[], t){for (n = anz-2; n >= 0; n--)

return;for (i = 0; i < anz-1; i++)

P[i] = (1-t)*P[i]+t*P[i+1];De casteljau( anz 1 P[] t);

for (i = 0; i <= n; i++)P[i] = (1-t)*P[i]+t*P[i+1];

} /*Rückgabewert in P[0]*/De-casteljau( anz-1, P[], t);} /*Rückgabewert in P[0]*/

0,2P0,1P20P

1,1P

21Pfor (i=0; i < 100; i++)

De-casteljau( 4, P, i/100.0);

1,0P

2,0

)(tP1,2P

2,1

Alternativer Abbruch zur vordefinierten Anzahl von Punkten: schlaue Routine „isflat“

P 03P0,0P 0,3

5.0=tT. Grosch - 27 -

ImplementierungImplementierungEntweder durch rekursiveEntweder durch rekursive Unterteilung

Ergebnis sind Punkte für t-Werte bei Vielfachen von 1/2i

Oder durch de Casteljau…

0,2P0,1P 1,1P

2,0P

)(tP

2,1PAuswertung der Kurve mit konstantenAbständen für t

Die Abstände der 2D Punkte sind nicht gleichAutomatisch kürzerer Abstand bei stärkerer Krümmung

1,0P)(

1,2P

0,0P 0,3P5.0=t .

T. Grosch - 28 -

Splines und StetigkeitenSplines und StetigkeitenStetigkeit zwischen

SplinesDer Begriff kommt aus dem

Stetigkeit zwischen parametrischen Kurven

C0 = G0 = gleicher PunktP t i h St ti k it C1g

Schiffbau und bezeichnet eingespannte Holz-/Metallplanken

Parametrische Stetigkeit C1

• Tangentialvektoren sind identischp

„Spline Kurven sind eine Familie von Funktionen, die aus einer Menge von

Geometrische Stetigkeit G1

• Nur gleiche Richtung der Tangentialvektoreng

Kontrollpunkten „weiche“ (smooth) Kurven generieren“smooth: stetig in allen

gDie Bézier-Kurven gehören zur Familie der Splines und werden manchmal auchsmooth: stetig in allen

Ableitungen„stückweise polynomielle Funktionen“

werden manchmal auch Bézier-Splines genannt.

Funktionen

T. Grosch - 29 -

KurvenKurvenIn der Regel werden Zur Bestimmung der ParameterIn der Regel werden Polynome 3. Grades zur Annäherung von Kurven verwendet da das Auge C0

Zur Bestimmung der Parameter werden Bedingungen an die Endpunkte, Tangenten Vektoren oder Stetigkeitenverwendet, da das Auge C0,

C1 und ev. C2-Stetigkeiten für „weiche Kurven“ fordert.

Vektoren oder Stetigkeiten zwischen Kurvensegmenten verwendet.

Allgemein lässt sich unser Problem dann so schreiben:

( ) ( ) ( ) ( )[ ]tztytxtP =

( )( ) 23

23

+++=

+++=

dtctbtaty

dtctbtatx

yyyy

xxxx

( ) ( ) ( ) ( )[ ]y ( )( ) 10;23 ≤≤+++= tdtctbtatz

y

zzzz

yyyy

T. Grosch - 30 -

Parametrische Kurven IParametrische Kurven I

Mit Hilfe von T ( Monombasis“) und derMit Hilfe von T („Monombasis ) und der Koeffizientenmatrix C

⎟⎟⎞

⎜⎜⎛ zyx

bbbaaa

[ ] 10;123 ≤≤= ttttT⎟⎟⎟⎟

⎜⎜⎜⎜=

zyx

zyx

dddcccbbb

C

lässt sich das Gleichungssystem auch so darstellen:

⎟⎠

⎜⎝ zyx ddd

lässt sich das Gleichungssystem auch so darstellen: ( )( )

xxxx

db

dtctbtatx +++=23

23 ( ) ( ) ( ) ( )[ ]CT

tztytxtP =

( )( ) zzzz

yyyy

dtctbtatz

dtctbtaty

+++=

+++=23

23 CT ⋅=

T. Grosch - 31 -

Parametrische Kurven IIParametrische Kurven II

Mit C = M·G erhält man schließlichMit C = M G erhält man schließlich

( ) ( ) ( ) ( )[ ] GMTCTtztytxtP ⋅⋅=⋅==

⎟⎞

⎜⎛

⎟⎞

⎜⎛ 114131211 Gmmmm

(eigentlich: )

[ ]⎟⎟⎟⎟

⎜⎜⎜⎜⋅⎟⎟⎟⎟

⎜⎜⎜⎜⋅=

3

2

1

34333231

24232221

14131211

23 1GG

mmmmmmmm

ttt⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

zyx

zyx

zyx

ggggggggg

333

222

111

(eigentlich: )

⎟⎟⎠

⎜⎜⎝

⎟⎟⎠

⎜⎜⎝ 4

3

44434241

34333231

Gmmmm⎟⎟⎠

⎜⎜⎝ zyx

y

ggg 444

TMonombasisvektor

MBasismatrix

GGeometrievektor

T. Grosch - 32 -

Beispiel: BézierBeispiel: BézierDer Geometrievektor besteht aus den 4 KontrollpunktenDer Geometrievektor besteht aus den 4 Kontrollpunkten

Jeder Kontrollpunkt als Zeilenvektor

⎟⎞

⎜⎛ 0P

⎟⎞

⎜⎛ −− 1331

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=2

1

PP

G

⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎛

−−

=00330363

M

⎟⎟⎠

⎜⎜⎝ 3

2

P⎟⎟⎠

⎜⎜⎝ 0001

0033

⎟⎞

⎜⎛

⎟⎞

⎜⎛ −− 01331 P

( ) [ ]⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

−−

⋅=2

1

0

23

003303631331

1PP

ttttPDie Spalten der Basismatrix Menthalten die Koeffizienten der

Bernstein-Polynome(in Monom-Form), z.B.⎟⎟

⎠⎜⎜⎝

⎟⎟⎠

⎜⎜⎝ 30001 P

( ) ( ) ( ) ( ) 33

22

12

03 13131 PtPttPttPttP +−⋅⋅+−⋅⋅+−=

( ),( ) 1331 233 +−+−=− tttt

T. Grosch - 33 -

Hermite-KurvenHermite-Kurven

Die Kurve wird gesteuert durch Start- und Endpunkt PDie Kurve wird gesteuert durch Start- und Endpunkt P0und P1, sowie deren Tangentenvektoren d0 und d1

⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎛

= 1

0

dPP

GH ?=HM

0dv

(Tangenten hier aus Platzgründen zu kurz gezeichnet, in der Zeichnung soll nur die

⎟⎟⎠

⎜⎜⎝ 1

0

dd

P 1P

Richtung verdeutlicht werden ….)

0P 1

dv

1d

T. Grosch - 34 -

Hermite-Kurven: BerechnungHermite-Kurven: Berechnung( ) [ ]

xHHxxxx GMtttdtctbtatx ⋅⋅=+++= 12323

( ) [ ]xx HH GMPx ⋅⋅== 10000 0

( ) [ ]xx HH GMPx ⋅⋅== 11111 1 xx

( ) [ ]xHHxxx GMttctbtatx ⋅⋅=++= 012323' 22

( ) [ ] HH GMdx ⋅⋅== 01000' 0

Analog für y(t), y´(t)

( ) [ ]xx HH GMdx 01000 0

( ) [ ]xx HH GMdx ⋅⋅== 01231' 1

GMGPP

⋅⋅⎟⎟⎟⎞

⎜⎜⎜⎛

==⎟⎟⎟⎞

⎜⎜⎜⎛

11111000

1

0

⎟⎟⎟⎞

⎜⎜⎜⎛

−−−−

=⎟⎟⎟⎞

⎜⎜⎜⎛

=

12331122

11111000 1

HMHHH GMG

dd

⎟⎟⎟

⎠⎜⎜⎜

⎝⎟⎟⎟

⎠⎜⎜⎜

⎝ 01230100

1

0 ⎟⎟⎟

⎠⎜⎜⎜

⎝⎟⎟⎟

⎠⎜⎜⎜

⎝ 00010100

01230100H

T. Grosch - 35 -

Hermite-Kurven: BasisfunktionenHermite-Kurven: Basisfunktionen

⎟⎟⎞

⎜⎜⎛

⎟⎟⎞

⎜⎜⎛ − 0

12331122

PP

( ) [ ]⎟⎟⎟⎟

⎠⎜⎜⎜⎜

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

−−−⋅=

1

0

123

000101001233

1

ddP

ttttP

⎠⎝⎠⎝

( ) ( ) 123

023

123

023 )()2(32132)( dttdtttPttPtttP −++−++−++−=

0.8

1

132 23 +− tt 23 32 tt +−

0.4

0.6

0

0.2

0 0.2 0.4 0.6 0.8 1

ttt +− 23 2

23 tt −

T. Grosch - 36 -

Hermite ↔ Bézier IHermite ↔ Bézier I

⎟⎞

⎜⎛

⎟⎞

⎜⎛ − 01122 PH

( ) [ ]⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−−−

⋅=0

1

0

23

01001233

1dP

ttttPH

Hermite:

⎟⎠

⎜⎝

⎟⎠

⎜⎝ 10001 d

⎟⎞

⎜⎛

⎟⎞

⎜⎛ −− 01331 P

( ) [ ]⎟⎟⎟⎟⎟

⎠⎜⎜⎜⎜⎜

⎟⎟⎟⎟⎟

⎠⎜⎜⎜⎜⎜

−−

⋅=

3

2

123

000100330363

1

PPP

ttttPBézier:

⎠⎝⎠⎝ 30001 P

⎟⎟⎞

⎜⎜⎛

⎟⎟⎞

⎜⎜⎛

−−−−

⎟⎟⎞

⎜⎜⎛

−−−

⎟⎟⎞

⎜⎜⎛

1

01

1

0

12331122

03631331

PP

PP

H

H

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

⎝⎟⎟⎟⎟

⎠⎜⎜⎜⎜

−=

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

⎝ 1

0

1

3

2

1

00010100

00010033

dd

PP

T. Grosch - 37 -

Hermite ↔ Bézier IIHermite ↔ Bézier II

⎞⎛⎞⎛⎞⎛⎞⎛−1 H

⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎛

⋅⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎛

−−−−

⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎛

−−

−−

=⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎛

0

1

01

2

1

0

01001233

1122

003303631331

dPP

PPP

H

H

⎟⎟⎠

⎜⎜⎝

⎟⎟⎠

⎜⎜⎝

⎟⎟⎠

⎜⎜⎝

⎟⎟⎠

⎜⎜⎝ 1

0

3

2

00010001 dd

P

⎟⎞

⎜⎛

⎟⎞

⎜⎛ −⎟⎞

⎜⎛

⎟⎞

⎜⎛ 00 11221000 PP H

⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

−−−

⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

=

⎟⎟⎟⎟⎟⎞

⎜⎜⎜⎜⎜⎛

0

1

0

2

1

0

01001233

13231013100

000

dPP

PP H

⎟⎠

⎜⎝

⎟⎟⎠

⎜⎜⎝⎟⎟⎠

⎜⎜⎝

⎟⎟⎠

⎜⎜⎝ 13 00011111 dP

⎟⎟⎞

⎜⎜⎛

⎟⎟⎞

⎜⎜⎛

⎟⎟⎞

⎜⎜⎛ 00

031010001

PP

PP

H

H

H

H

dPP

PP 00

31

=

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

−=

⎟⎟⎟⎟

⎠⎜⎜⎜⎜

⎝ 1

0

1

3

2

1

001031010

03101

ddP

PPP H

H

H

H

PP

dPP

dPP

13

112

001

31

31

=

⋅−=

⋅+=

⎠⎝⎠⎝⎠⎝ 13 PP 13

T. Grosch - 38 -

Beispiel dBeispiel

HPP

0d

H

H

H

dPP

dPP

PP

001

00

31

31

⋅−=

⋅+=

=

PHPP

dPP

13

112 31

=

=2P

P

1P

P0P 3P

0P 1P

Hermite Bézier

1dHermite: SEHR lange Tangenten…

1

T. Grosch - 39 -

Hermite-SplinesHermite-Splines

Liefert eine InterpolationLiefert eine InterpolationEignen sich gut, wenn Punkte und Tangenten gegeben sindgegeben sindGutes Beispiel: Kamera-Animation

Man definiert für jeden „Key-Frame“ den Ort der Kamera und j „ ydie tangentiale BlickrichtungMit Hilfe eines Hermite-Splines wird eine weiche Kamerabewegung interpoliertKamerabewegung interpoliert.Problem: Überschwingen

Terrain

T. Grosch - 40 -

Catmull-Rom SplinesCatmull-Rom SplinesSpeziallfall der Hermite-SplinesSpeziallfall der Hermite SplinesGegen ist ein Menge von Punkten (Datentabelle, Mausklicks), gesucht eine interpolierte KurveIdee: die Tangente der Hermite-Splines wird automatisch aus Vorgänger- und Nachfolgerpunkt berechnet:

211 −+ −

= iii

PPd 2

Optionen für Randpunkte:weglassen

13

4

weglassenTangente aus P1 und P2 (bzw. PN-1 und PN) bildenzyklisch (geschlossene Kurve)

3

T. Grosch - 41 -

Kurven in OpenGL

Bézierkurven in OpenGLBézierkurven in OpenGL

Stützpunkte werden bestimmt durchStützpunkte werden bestimmt durchglMap{12}{fd}( target, u1, u2, ustride, uorder,

[v1, v2, vstride, vorder,] points );[ , , , ,] p );target bestimmt, wofür die Stützpunkte dienen sollen: GL_MAP{12}_VERTEX{34}, GL_MAP{12}_COLOR_4, GL MAP{12} NORMALGL_MAP{12}_NORMAL, GL_MAP{12}_TEXTURE_COORD_{1234} bestimmt sowohl Attribut als auch Komponentenanzahl

T. Grosch - 43 -

StützpunkteStützpunkte

u1 u2 bzw v1 v2 bestimmen den Parameterbereichu1, u2 bzw. v1, v2 bestimmen den Parameterbereich, den die Kurve abdecken soll (normal zwischen 0 und 1))ustride/vstride die Anzahl der Float-Werte pro Stützpunkt (also 3 für x, y und z)uorder/vorder die Anzahl der Stützpunkte in u/v-Richtung, Maximum implementierungsabhängigpoints zeigt auf den ersten Stützpunkt

T. Grosch - 44 -

EvaluierungEvaluierung

Punkte auf der Kurve/Fläche können dann durchPunkte auf der Kurve/Fläche können dann durchglEvalCoord{12}{df}[v]( value[, value] );erzeugt werdenerzeugt werdendabei wird für jede glEnable()te Map das entsprechende Kommando ausgeführt z B wennentsprechende Kommando ausgeführt, z.B. wenn GL_MAP{12}_VERTEX_3 und GL_MAP{12}_COLOR_4 aktiv sind

glColor4( r,g,b,a );glVertex3f( x,z,y );g ( y )

T. Grosch - 45 -

BeispielBeispiel/* bezcurve.c */ void display(void)

#include <stdlib.h>#include <GL/glut.h>

{int i;

glClear(GL_COLOR_BUFFER_BIT);GLfloat ctrlpoints[4][3] = {

{ -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0}, { 2.0, -4.0, 0.0},

glColor3f(1.0, 1.0, 1.0);glBegin(GL_LINE_STRIP);

for (i = 0; i <= 30; i++) glEvalCoord1f((GLfloat) i/30.0);

{ 4.0, 4.0, 0.0}};

void init(void){

glEnd();/* The following code displays the control points as dots. */glPointSize(5.0);

glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);

glColor3f(1.0, 1.0, 0.0);glBegin(GL_POINTS);

for (i = 0; i < 4; i++) glVertex3fv(&ctrlpoints[i][0]);

glEnable(GL_MAP1_VERTEX_3);}

glEnd();glFlush();

}

T. Grosch - 46 -

ZusammenfassungZusammenfassung

Bezier SplinesBezier SplinesRekursive UnterteilungBernstein Polynomeyde Casteljau Verfahren

Hermite SplinesCatmull-Rom Splines

Nächste WocheRay Tracing

T. Grosch - 47 -