Kurven und Flächen
Kurven und Flächen
Kurven und Flächen
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