28.10.2013 Aufrufe

Kurven und Flächen

Kurven und Flächen

Kurven und Flächen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Kurven</strong> <strong>und</strong> <strong>Flächen</strong><br />

Thomas Jung<br />

t.jung@fhtw-berlin.de<br />

Motivation<br />

Die Modellierung von Objekten erfordert die<br />

geeignete Repräsentation der Oberfläche<br />

Je nach Anforderung werden unterschiedliche<br />

Eigenschaften repräsentiert<br />

Geschwungene Formen werden mit Hilfe<br />

von Freiformflächen repräsentiert<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Repräsentationen:<br />

Vor- <strong>und</strong> Nachteile<br />

Dreiecksstreifen <strong>und</strong> –fächer<br />

+ Sind effizient zu rendern<br />

+ Ein neuer Eckpunkt pro Dreieck<br />

+ Dreicke sind immer planar<br />

- Kein Konzept von Nachbarschaft<br />

Winged-Edge-Datenstuktur<br />

- Kein Konzept des<br />

umschlossenen Raums<br />

- Hoher Speicherbedarf<br />

Extrusionen (Sweeps)<br />

- Ungenaue Beschreibung<br />

- Schwierig zu deformieren Parametrische<br />

Repräsentationen (NURBS)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Heute<br />

Oberflächenrepräsentationen<br />

Kontinuierliche <strong>Kurven</strong><br />

Bezier-<strong>Kurven</strong><br />

Freiformflächen<br />

NURBS<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Oberflächenrepräsentationen<br />

Diskret<br />

Kontinuierlich<br />

Dreiecksstreifen Winged-Edge-<br />

Datenstruktur<br />

Primitivobjekte Extrusion NURBS<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Parametrische Repräsentationen<br />

Zur Beschreibung gekrümmter <strong>Kurven</strong><br />

<strong>und</strong> <strong>Flächen</strong><br />

Genaue Beschreibung möglich<br />

Einfache Veränderung der Form<br />

Einsatz in der Modellierung<br />

Niedriger Speicherbedarf<br />

Komplexe Darstellungsalgorithmen<br />

Häufig Konvertierung in Polygonliste<br />

erforderlich<br />

© Thomas Jung, t.jung@fhtw-berlin.de


Beispiel: NURBS<br />

NURBS-Oberfläche<br />

besteht aus Patches<br />

16 Kontrollpunkte pro<br />

Patch<br />

Randkurve beeinflusst<br />

durch 4 Kontrollpunkte<br />

(hauptsächlich !)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Herleitung von NURBS<br />

Lineare Interpolation<br />

Was sind Kontrollpunkte? ...<br />

<strong>Kurven</strong>stücke<br />

Parameter t führt über das <strong>Kurven</strong>stück<br />

Vom <strong>Kurven</strong>stück zur Kurve<br />

C(1)-Kontinuität an den Übergängen<br />

Höhere Kontinuität<br />

Glattere Übergänge, C(2)-Kontinuität: B-Splines<br />

Von der Kurve zur Fläche<br />

NURBS<br />

Anordnung von Kontrollpunkten<br />

Gebrochen-rationale Interpolationsformeln<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Beispiel: Lineare Interpolation<br />

Kontrollpunkte<br />

P1<br />

t=0<br />

Interpolationsformel<br />

P(t) = (1-t) * P1 + t * P2<br />

Abtastung<br />

For (t = 0; t < 1; t + dt)<br />

Zeichne Linie von P(t) nach P(t + dt)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

P(t)<br />

P(t+dt)<br />

t dt<br />

P2<br />

t=1<br />

Spline-Demo<br />

(Beispiel für gelungene Belegarbeit)<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Kontinuierliche <strong>Kurven</strong><br />

Kontrollpunkte<br />

Modellierung bzw. Gestaltung der Kurve<br />

Generierungsvorschrift<br />

Gestalt (z. B. Weichheit) der Kurve<br />

Interpolation oder Approximation<br />

Abtastung mit Parameter<br />

Rendering der Kurve<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Parameter t<br />

Wertebereich von 0 bis 1<br />

Soll Kurve regelmäßig abtasten<br />

t=0<br />

t=1<br />

Px<br />

( t)<br />

= t<br />

Schlecht:<br />

2<br />

Py<br />

( t)<br />

= 1−<br />

t<br />

t=0<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

t=1<br />

Px<br />

( t)<br />

= sin( t * 90°<br />

)<br />

Gut:<br />

P ( t)<br />

= cos( t * 90°<br />

)<br />

y


p<br />

Bezier-Approximation<br />

Approximationsformel<br />

r<br />

r−1<br />

p ( t)<br />

= ( 1−<br />

t)<br />

* p ( t)<br />

+ t * p<br />

i<br />

i<br />

r−1<br />

i+<br />

1<br />

( t)<br />

Geometrische Interpretation<br />

1 1<br />

0(<br />

) 4<br />

0<br />

p0<br />

2 1<br />

0 ( 4<br />

p<br />

0<br />

p1<br />

)<br />

p<br />

1 1<br />

1 ( 4<br />

p<br />

3 1<br />

0 ( 4<br />

)<br />

)<br />

p<br />

2 1<br />

1 ( 4<br />

)<br />

0<br />

p2<br />

1 1<br />

2(<br />

4<br />

p<br />

0<br />

p3<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

)<br />

(De Castelijau-Repräsentation)<br />

3 2 p0<br />

() 4<br />

3 1 p0<br />

() 4<br />

Kontrollpunkte<br />

Interpolations- <strong>und</strong><br />

Approximationsformeln<br />

Lineare Interpolation<br />

Bezier-Approximation<br />

Hermite-Approximation<br />

Spline-Approximation<br />

B-Splines<br />

Beta-Splines<br />

Catmull-Rom-Splines<br />

NURBS<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

B-Splines<br />

3 3 p ( )<br />

Idee: Zusammenfügen von<br />

elastischen Metallstreifen („Splines“)<br />

C(2)-kontinuierlich<br />

Kontrollpunkte werden i. d. R. nicht<br />

durchlaufen<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

0 4<br />

Unterschiedliche<br />

Approximationsformeln<br />

Bezier-Approximation<br />

Kontrollpunkte beschreiben<br />

konvexe Hülle<br />

Hermite-Approximation<br />

Start- <strong>und</strong> Endpunkt<br />

Start- <strong>und</strong> Endrichtung<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Vom <strong>Kurven</strong>stück zur Kurve<br />

Lineare Interpolation<br />

Knicke<br />

C(0)-kontinuierlich<br />

Bezier-Approximation<br />

C(1)-kontinuierlich<br />

Wenn P3, P4, P5 auf<br />

einer Geraden<br />

Einmal stetig differenzierbar<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

P1<br />

P2<br />

P3<br />

P4<br />

P5 P6<br />

Kubische B-Splines<br />

Vier Kontrollpunkte<br />

<strong>Kurven</strong>stück verläuft „zwischen“<br />

mittleren Kontrollpunkten P2 <strong>und</strong> P3<br />

P3<br />

P2<br />

P1<br />

P4<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

P7


B-Splines zusammensetzen<br />

Benachbarte <strong>Kurven</strong>stücke haben drei<br />

gemeinsame Kontrollpunkte<br />

C(2)-Kontinuität P3<br />

P2<br />

P1<br />

Duplizieren der <strong>Kurven</strong>endpunkte<br />

Werden dann von Kurve durchlaufen<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Generierungsvorschrift -<br />

Wichtige Eigenschaften<br />

Symmetrie bzgl. des <strong>Kurven</strong>stücks<br />

k2(t) = k3(1-t) <strong>und</strong> k1(t) = k4(1-t)<br />

Symmetrie für Enden des <strong>Kurven</strong>stücks<br />

k1(0) = k3(0) <strong>und</strong> k2(1) = k4(1)<br />

Einfluß der Kontrollpunkte<br />

k4(0) = 0 <strong>und</strong> k1(1) = 0<br />

Interpolation<br />

Wenn k1(t) <strong>und</strong> k4(t) gleich null<br />

Sonst Approximation<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

P4<br />

1 k2( t)<br />

=1−t<br />

P5<br />

k ( t)<br />

= t<br />

0<br />

t<br />

k1<br />

( t)<br />

= k4(<br />

t)<br />

= 0<br />

0 1<br />

B-Splines: Basisfunktionen<br />

1<br />

1<br />

1<br />

1<br />

k =<br />

6<br />

6<br />

6<br />

6<br />

3<br />

3 2<br />

3 2<br />

3<br />

1(<br />

t)<br />

= ( 1−<br />

t)<br />

k2<br />

( t)<br />

= ( 3t<br />

− 6t<br />

+ 4)<br />

k3(<br />

t)<br />

= ( −3t<br />

+ 3t<br />

+ 3t<br />

+ 1)<br />

k4<br />

( t)<br />

t<br />

k2 k3<br />

k1<br />

k4<br />

3<br />

Interpolationsformel für<br />

lineare Interpolation<br />

P1<br />

P ( t)<br />

= k ( t)<br />

* P + k ( t)<br />

* P + k ( t)<br />

* P + k ( t)<br />

* P<br />

1<br />

P2<br />

1<br />

2<br />

1 k2( t)<br />

=1 − t<br />

P3<br />

k1<br />

( t)<br />

= k4<br />

( t)<br />

= 0<br />

0<br />

0 1<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

k2 k3<br />

k1<br />

k4<br />

2<br />

P4<br />

3<br />

k ( t)<br />

= t<br />

Spline-Generierungsvorschrift<br />

Gewichtungen ki(t) der Kontrollpunkte<br />

werden Basisfunktionen genannt<br />

P ( t)<br />

= k ( t)<br />

* P + k ( t)<br />

* P + k ( t)<br />

* P + k ( t)<br />

* P<br />

1<br />

1<br />

2<br />

3<br />

t<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

B - Splines<br />

Approximationsformel<br />

1 3<br />

k 1(<br />

t)<br />

= ( 1−<br />

t)<br />

6<br />

1 3 2<br />

k2<br />

( t)<br />

= ( 3t<br />

− 6t<br />

+ 4)<br />

6<br />

1 3 2<br />

k3(<br />

t)<br />

= ( −3t<br />

+ 3t<br />

+ 3t<br />

+ 1)<br />

6<br />

1 3<br />

k4<br />

( t)<br />

= t<br />

6<br />

1 3<br />

Qi<br />

( t)<br />

= [ ( 1−<br />

t)<br />

6<br />

3 2<br />

3t<br />

− 6t<br />

+ 4<br />

3 2<br />

− 3t<br />

+ 3t<br />

+ 3t<br />

+ 1<br />

⎡ Pi<br />

⎤<br />

⎢ ⎥<br />

3 ⎢<br />

Pi<br />

+ 1<br />

t ] * ⎥<br />

⎢P<br />

⎥ i+<br />

2<br />

⎢ ⎥<br />

⎣Pi<br />

+ 3 ⎦<br />

3<br />

Q i ( t)<br />

= [ t<br />

2<br />

t t<br />

⎡−<br />

1<br />

⎢<br />

1 3<br />

1]<br />

* ⎢<br />

6 ⎢−<br />

3<br />

⎢<br />

⎣ 1<br />

3<br />

− 6<br />

0<br />

4<br />

− 3<br />

3<br />

3<br />

1<br />

1⎤<br />

⎡ Pi<br />

⎤<br />

0<br />

⎥ ⎢<br />

P<br />

⎥<br />

⎥ i 1<br />

* ⎢ + ⎥ = T * B * Gi<br />

0⎥<br />

⎢P<br />

⎥ i+<br />

2<br />

⎥ ⎢ ⎥<br />

0⎦<br />

⎣Pi<br />

+ 3 ⎦<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

2<br />

B-Spline-Basismatrix<br />

3<br />

3<br />

3<br />

4<br />

4<br />

4<br />

4


Weitere Basismatrizen<br />

ß-Splines<br />

Zusätzliche Parameter “tension” <strong>und</strong> “skew”<br />

(Scharfheit der Kurve)<br />

3<br />

3 2<br />

2<br />

⎡−<br />

2β<br />

⎤<br />

1 2(<br />

β 2 + β1<br />

+ β1<br />

+ β1<br />

) − 2(<br />

β2<br />

+ β1<br />

+ β1<br />

+ 1)<br />

2<br />

⎢ 3<br />

3 2<br />

2 ⎥<br />

1<br />

⎢ 6β1<br />

− 3(<br />

β2<br />

+ 2β1<br />

+ 2β1<br />

) 3(<br />

β 2 + 2β1<br />

) 0⎥<br />

3 2<br />

+ 2 + 4 + 4 + 2 ⎢ 3<br />

3<br />

β<br />

− 6 6(<br />

− )<br />

6<br />

0⎥<br />

2 β1<br />

β1<br />

β1<br />

β1<br />

β1<br />

β1<br />

β1<br />

⎢ 3<br />

2<br />

⎥<br />

⎢⎣<br />

2β1<br />

β 2 + 4(<br />

β1<br />

+ β1<br />

)<br />

2 0⎥⎦<br />

Catmull-Rom-Splines<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

⎡−1<br />

3 − 3 1 ⎤<br />

⎢<br />

⎥<br />

1 ⎢<br />

2 − 5 4 −1<br />

⎥<br />

2 ⎢−1<br />

0 1 0 ⎥<br />

⎢<br />

⎥<br />

⎣ 0 2 0 0 ⎦<br />

Von der Kurve zur Fläche<br />

2-stufige Anwendung der B-Spline-<br />

Interpolationsformel<br />

<strong>Kurven</strong>stück wird über die Fläche<br />

interpoliert<br />

Interpolation aller vier Kontrollpunkte<br />

jeweils mit Spline-Kurve<br />

Kontrollpunkte<br />

für 9 Patches<br />

Zusammengefügte<br />

Patches<br />

Zusammensetzen von<br />

B-Spline - Patches<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Randstücke mit<br />

verdoppelten<br />

Kontrollpunkten<br />

Zusammenfassung: <strong>Kurven</strong><br />

Parameter t von 0 bis 1 zum regelmäßigen<br />

Abtasten von <strong>Kurven</strong>stücken<br />

Generierungsvorschrift definiert die Gewichtung<br />

der Kontrollpunkte abhängig von t<br />

Bei Interpolation werden Kontrollpunkte<br />

durchlaufen<br />

Kurve besteht aus mehreren <strong>Kurven</strong>stückchen<br />

Bezier-Approximation ist maximal C(1)kontinuierlich<br />

B-Splines bieten C(2)-Kontinuität<br />

Basismatrizen für B-Splines, Catmull-Rom-<br />

Splines <strong>und</strong> ß-Splines<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Approximationsformel für<br />

<strong>Flächen</strong><br />

Q(<br />

t)<br />

= T * M * G<br />

Q(<br />

s,<br />

t)<br />

= T * M * G(<br />

s)<br />

<strong>Kurven</strong>stück mit variablen Kontrollpunkten<br />

T ⎡ P ( s)<br />

⎤ 1<br />

⎢ T ⎥<br />

P2<br />

( s)<br />

Q(<br />

s,<br />

t)<br />

= T * M * ⎢ ⎥<br />

⎢ T<br />

P ( s)<br />

⎥<br />

3<br />

⎢ T ⎥<br />

⎢⎣<br />

P4<br />

( s)<br />

⎥⎦<br />

P ( s)<br />

= S * M * H Approximation eines Kontrollpunkts<br />

i<br />

P ( s)<br />

= S<br />

i<br />

T<br />

P ( s)<br />

=<br />

i<br />

* M * [ g i1<br />

g i 2 g i3<br />

T<br />

g i 4 ]<br />

[ g g g g<br />

T ] * M *<br />

i1<br />

i<br />

i 2<br />

⎡ g<br />

⎢<br />

g<br />

Q(<br />

s,<br />

t)<br />

= T * M * ⎢<br />

⎢g<br />

⎢<br />

⎣g<br />

11<br />

21<br />

31<br />

41<br />

i3<br />

g<br />

g<br />

g<br />

g<br />

12<br />

22<br />

32<br />

42<br />

i 4<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

g<br />

g<br />

g<br />

g<br />

13<br />

23<br />

33<br />

43<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

T<br />

S<br />

g14<br />

⎤ Einsetzen von Pi(s)<br />

g<br />

⎥<br />

24 ⎥ T T<br />

* M * S<br />

g ⎥ 34<br />

⎥<br />

g 44 ⎦<br />

T<br />

Zusammensetzen von<br />

zwei Bezier-Patches<br />

C(1) -Kontinuität<br />

C(0) -Kontinuität


Manipulation von<br />

B-Spline-<strong>Flächen</strong><br />

Lokale Kontrolle<br />

Veränderung der<br />

Kontrollpunkte<br />

Ein Kontrollpunkt hat<br />

Einfluß auf maximal<br />

16 Patches<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Nonuniform Rational B-Splines<br />

(NURBS)<br />

Kontrollpunkte in homogenen Koordinaten<br />

Rational durch Division<br />

Homogene Koordinate ist Gewicht des<br />

Kontrollpunkts<br />

Nähe der Kurve zum Kontrollpunkt<br />

NURBS sind invariant auch bezüglich<br />

perspektivischer Transformation<br />

Tiefenerhaltende Perspektivische Projektion der<br />

Kontrollpunkte vor dem Rendering möglich<br />

Repräsentation von Kugeln möglich<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

NURBS mit der glu-Bibliothek<br />

nurb = gluNewNurbsRenderer();<br />

gluNurbsProperty(nurb,<br />

GLU_SAMPLING_TOLERANCE, 25.0);<br />

gluNurbsProperty(nurb, GLU_DISPLAY_MODE,<br />

GLU_FILL);<br />

gluBeginSurface(nurb);<br />

gluNurbsSurface(nurb, nSKnoten, sKnoten,<br />

nTKnoten, tKnoten, sRasterabstand,<br />

tRasterabstand, kontrollpunkte, 4, 4,<br />

GL_MAP2_VERTEX_4);<br />

gluEndSurface(nurb);<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Anordnung der Kontrollpunkte<br />

Uniform (Nonrational) B-Splines<br />

Kontrollpunkte sind gleichmäßig über<br />

Parameterraum verteilt<br />

C2-Kontinuität<br />

Nonuniform (Nonrational) B-Splines<br />

Kontrollpunkte ungleichmäßig verteilt<br />

Kontinuität von C0 bis C2 an Kontrollpunkten<br />

Einsetzen von Kontrollpunkten<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

NURBS in Maya<br />

© Thomas Jung, t.jung@fhtw-berlin.de<br />

Zusammenfassung<br />

Polygonlisten<br />

können direkt dargestellt werden<br />

besitzen kein Konzept vom umschlossenen Raum<br />

sind nur schwer zu deformieren<br />

Winged-Edge-Datenstruktur beschreibt Nachbarschaften<br />

Sweeps<br />

Ermöglichen Beschreibung von <strong>Flächen</strong> <strong>und</strong> Räumen<br />

Splines<br />

müssen für Echtzeitdarstellung in Polygone transformiert<br />

werden<br />

können leichter bearbeitet werden<br />

© Thomas Jung, t.jung@fhtw-berlin.de

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!