Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

§2-1 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Aufgabe Modellieren Sie mittels Bézier-Kurven einen.

Ähnliche Präsentationen


Präsentation zum Thema: "§2-1 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Aufgabe Modellieren Sie mittels Bézier-Kurven einen."—  Präsentation transkript:

1 §2-1 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Aufgabe Modellieren Sie mittels Bézier-Kurven einen Kreis. Hinweis: Beginnen Sie mit einem Viertelkreis Modellieren Sie anschließend eine Kugel aus Bézier-Patches

2 §2-2 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Rationale Kurven Rationale Bézier-Kurven Mit polynomialen Segmenten lassen sich Kegelschnitte, wie z.B. Kreise und Ellipsen, nicht exakt darstellen. Um dies zu ermöglichen, betrachten wir Bézier-Kurven in projektiven Räumen unter Verwendung von homogenen Koordinaten. Als Gewichte der Kontrollpunkte b i führen wir die Größen w i ein. Somit erhalten wir die Darstellung für rationale Bézier-Kurven. Letztere sind gebrochen-rationale Funktionen, d.h. Zähler und Nenner sind Polynome. Mit dieser Technik wird es möglich, Kegelschnitte exakt darzustellen.

3 §2-3 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Rationale Kurven Wir erhalten folgende rationale Bézier-Kurvendarstellung:

4 §2-4 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Rationale Kurven Einfluss unterschiedlicher Punktgewichte

5 §2-5 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Rationale Kurven Beispiel: Darstellung eines Viertelkreises b 0 = (0,1) b 1 = (1,1) b 2 = (1,0) w 0 = 1 w1 =w1 = w 2 = 1

6 §2-6 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Bei der Interpolation mit Polynomen treten insbesondere bei hohen Polynomgraden starke Oszillationen auf. Um diese Oszillationen einzudämmen, setzt man Kurven aus mehreren Segmenten von niedrigem Polynomgrad zusammen. Von den einzelnen Teilpolynomen verlangt man, dass sie sich in den Nahtstellen (die hier mit den Stützstellen übereinstimmen) glatt aneinander- fügen.

7 §2-7 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Definition: C k -Stetigkeit Eine Funktion f(t) ist C k -stetig (k 0), wenn die Funktion und ihre k Ableitungen stetig sind. C k [t 0,t n ] ist die Klasse der C k -stetigen Funktionen auf dem Intervall [t 0,t n ]. Definition: Spline = {t 0, t 1,, t n } sei ein monotoner (Knoten-)Vektor mit reellen Stützstellen t i < t i+1. Eine Funktion S heißt Spline vom Grad k- 1 (von der Ordnung k ), wenn gilt: (1) S ist ein Polynom vom Grad k- 1 in jedem Teilintervall [t i, t i+1 ] (2) S ist C k-2 -stetig auf [t 0, t n ].

8 §2-8 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Bemerkungen: 1. Der Spline S wird als interpolierender Spline bezeichnet, wenn für gegebene Interpolationspunkte (Ordinaten). 2. Der interpolierende Spline ist i.a. nicht eindeutig bestimmt. Er hat noch k-2 Freiheitsgrade, d.h. eine Vorgabe von Rand- bedingungen ist nötig. Für kubische Spines (k=4) wählt man oft die natürlichen Randbedingungen S´´( t 0 ) = 0 und S´´( t n ) = 0. Identifiziert man die Knoten t 0 und t n miteinander, so entsteht ein geschlossener Spline (ohne Randbedingungen).

9 §2-9 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Kubische Splines Statt die Form der interpolierenden Funktion vorzuschreiben, z.B. als Polynom eines bestimmten Höchstgrades, kann man auch Eigenschaften vorschreiben, wie z.B. einen möglichst glatten Verlauf. Fordern wir [1] unter den Nebenbedingungen [2], und so ergibt sich folgendes Resultat:

10 §2-10 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Satz: minimum-norm property Unter allen Funktionen, die die Bedingung [2] erfüllen, erteilt die interpolierende kubische Splinefunktion dem Integral [1] den kleinsten Wert. Es gibt verschiedene Möglichkeiten, die beiden Freiheitsgrade der Spline-Funktionen zu nutzen. Hier werden die beiden am häufig- sten verwendeten Fälle behandelt. und natürlicher Spline periodischer Spline

11 §2-11 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Um den Weg zu Algorithmen für Splinekurven aufzuzeigen, berechnen wir hier zunächst einmal die Koeffizienten eines natürlichen kubischen Splines: für Dies führt auf folgende Bedingungen für die Polynome S i :

12 §2-12 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Dies hat folgende Auswirkungen auf die Koeffizienten:

13 §2-13 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Wir setzen i :=t i+1 -t i und erhalten nach einigen Umformungen:

14 §2-14 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Da gilt, die also bekannt sind, ist im Wesentlichen ein lineares Gleichungssystem mit n-1 Gleichungen und bislang n+1 Unbekannten c i ( i =0,..., n ) zu lösen. Für einen natürlichen kubischen Spline gilt, was c 0 =c n =0 bedeutet. Fassen wir nun die Erkenntnisse zu einem Algorithmus zusammen:

15 §2-15 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Algorithmus für natürliche kubische Splines Gegeben seien n+1 Stützstellen t i mit t 0 < t 1 <... < t n und die Funktionswerte (bzw. Interpolationspunkte). Gesucht ist der zugehörige natürliche kubische Spline S in der Darstellung für und Berechnung der Koeffizienten : [3]

16 §2-16 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven [4] [5] [6] Bemerkungen: 1. Die Gleichungen [4] lauten in Matrizenschreibweise (Gleichungssystem für c i )

17 §2-17 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven mit

18 §2-18 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven 2. Die Matrix A ist tridiagonal, symmetrisch, diagonal-dominant, positiv definit und besitzt nur positive Elemente. A ist damit regulär und das lineare Gleichungssystem hat eine ein- deutige Lösung. Als Lösungsverfahren sollte man die direkte LU-Zerlegung für tridiagonale Matrizen verwenden, da der Algorithmus Komplexität O(n) hat. Im Fall periodischer Splines entfallen die Randbedingungen und es ergibt sich ein analoger Algorithmus.

19 §2-19 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Algorithmus für periodische kubische Splines Identifiziert man die Stützstellen t 0 und t n miteinander, d.h., p 0 = p n, die Interpolationskurve ist geschlossen und besitzt auch bei t 0 (bzw. t n ) einen C 2 -stetigen Übergang, so ändert sich an dem o.g. Algorithmus nur die Matrix A des Systems [4]:

20 §2-20 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Diese Matrix A ist zyklisch tridiagonal, symmetrisch, diagonal- dominant, positiv definit und besitzt nur positive Elemente; d.h. A ist gut konditioniert. Das System kann wiederum in 0(n) gelöst werden.

21 §2-21 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Da die Aufgabe der Splines in CAD im Wesentlichen in der Modellierung ebener oder räumlicher Kurven besteht, benötigen wir im folgenden den Begriff des vektorwertigen oder parametrischen Splines. Definition : Ist eine Zerlegung des Intervalls so heißt eine Abbildung parametrischer Spline vom Grad k-1 (Ordnung k ), wenn die Komponentenfunktionen Splines vom Grad k-1 sind. Insbesondere gilt für die Komponenten-Splines x i :, wofür wir im folgenden kurz schreiben.

22 §2-22 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Lokale Glattheitseigenschaften räumlicher Kurven, die durch Aneinanderhaftung von Teilkurven entstehen, belegt man üblicherweise mit folgender Begriffsbildung: Definition: Sind und parametrische Kurven mit und und haben den gemeinsamen Punkt X(t 1 )=Y(s 0 ), so sprechen wir genau dann von einem C k -Übergang der Kurven in ihrem gemeinsamen Punkt, wenn gilt: für alle r mit 1 r k. (Unstetigkeiten werden als C -1 -stetig bezeichnet.)

23 §2-23 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Algorithmus für parametrische kubische Splines Gegeben seien von einer Raumkurve die Interpolationspunkte Gesucht ist ein interpolierender parametrischer kubischer Spline. 1. Schritt: Parametrisierung: Festlegung der Parameterwerte t i ( i = 0,..., n ) zu den Interpolationspunkten 2. Schritt:Festlegung der Randbedingungen 3. Schritt: Berechnung der Spline Komponenten S x,S y,S z so dass S x (t i )=x i, S y (t i )=y i, S z (t i )=z i, (i=0,...,n) mit Hilfe des jeweiligen Spline-Algorithmus,

24 §2-24 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Bemerkung: Bei geschlossenen Kurven eignen sich periodische Splines, sofern die Kurve überall glatt ist. Liegen eine oder mehrere Spitzen vor ( C 0 -Übergängen, z.B. beim Querschnitt einer Tragfläche), dann eignen sich natürliche Splines mit den Spitzen als Anfangs- und Endpunkten.

25 §2-25 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Parametrisierungen Die Parameterwahl bestimmt sehr stark das Aussehen und damit auch die Qualität der Kurven (und Flächen). Gleiche Interpolationsaufgabe mit unterschiedlichen Parametrisierungen

26 §2-26 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Parametrisierungen Die Wirkung der Parameterwahl kann durch folgende kinematische Interpretation visualisiert werden: Der Kurvenparameter t wird als Zeitparameter aufgefasst, der angibt, wie lange ein Punkt X benötigt, um die Kurve X(t) zu durchlaufen. Wir betrachten zunächst die Interpolation einer Punktmenge durch eine Kurve; d.h. wir legen ein Parameterintervall [a,b] zugrunde und interpolieren n+1 Punkte.

27 §2-27 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Äquidistante Parametrisierung Bei der äquidistanten Parametrisierung steht nun für jedes zu interpolierende Punktepaar (P i,P i+1 ) die gleiche Durchlaufzeit zur Verfügung. Sind die Abstände zwischen den Punkten sehr unterschiedlich, so muss der Kernpunkt X die Interpolationskurve mit unterschiedlicher Geschwindigkeit durchlaufen. Folgt einem großen Abstand ein kleiner Abstand, so muss die größere Geschwindigkeit stark abgebremst werden, was zu einem Überschwingen der Interpolationskurve führen kann.

28 §2-28 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Chordale Parametrisierung Die Parametrisierung sollte der Struktur der Punktmenge in gewissem Sinne angepasst werden. Einen solchen Zugang liefert die chordale Parametrisierung, Die Parameterintervalle werden proportional zu den Abständen benachbarter Stütz- bzw. Interpolationspunkte gewählt mit s als Normierungsfaktor (z.B. s = Gesamtlänge des von den P i erzeugten Polygons).

29 §2-29 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven Zentripetale Parametrisierung Eine weitere Möglichkeit der Parameterwahl, welche die Struktur der Daten nachbildet, ist die so genannte zentripetale Parametri- sierung [Lee 1975]: Hier wird die zentripetale Beschleunigung näherungsweise minimiert. Sinnvoll sind auch Kombinationen dieser drei Typen. Eine Parametrisierung, die nicht nur Abstände, sondern auch noch Winkeländerungen in den Interpolationspunkten berücksichtigt, wurde von T. Foley entwickelt (siehe [Foley 1989]).

30 §2-30 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splinekurven

31 §2-31 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Basis Splines Bei der Konstruktion von Splines haben wir bisher polynomiale Basisfunktionen (z.B. Bernsteinpolynome) für die Darstellung der einzelnen Segmente betrachtet. Dies führt zur Konstruktion von Übergangsbedingungen an den Segmenttrennstellen. Ein eleganterer Ansatz zur Konstruktion von Splinekurven besteht darin, C k-2 -stetige Basisfunktionen aus mehreren Segmenten der Ordnung k zu konstruieren. Bei Verwendung dieser Basis Splines (B-Splines) entfallen die Übergangsbedingungen und es werden zudem weniger Kontrollpunkte (Koeffizienten) benötigt.

32 §2-32 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Beispiel: Quadratische B-Splinekurve mit Kontrollpunkten d 0...d 5. d0d0 t 0 =t 1 = t 2 t3t3 t 6 = t 7 = t 8 t4t t5t5 5 d5d5 d4d4 d3d3 d2d2 d1d1 2 : 3 5 : 4 3 : 4

33 §2-33 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Eine offene B-Splinekurve der Ordnung k (vom Grad k-1) ist gegeben durch m+1 Kontrollpunkte d 0,...,d m (de Boor-Punkte) und m+k+1 Knoten x 0 x 1....x m+k (Knotenvektor). Das Definitionsgebiet der B-Spline Kurve ist das Intervall [x k-1, x m+1 ], welches m-k+2 Segmente enthält. Die übrigen Knoten bestimmen das Verhalten der Kurve an den Rändern. Für das erste Splinesegment benötigt man k de Boor-Punkte, für jedes weitere Segment nur einen zusätzlichen de Boor-Punkt.

34 §2-34 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines de Boor-Algorithmus Analog zum de Casteljau-Algorithmus für Bézier-Kurven ermöglicht der de Boor-Algorithmus die effiziente Auswertung von B-Splinekurven (ohne die einzelnen Segmente herzuleiten). Zu gegebenem Parameter t bestimmt man zunächst den Index r, so dass t [ x r, x r+1 ). Der zugehörige Punkt f ( t ) der Splinekurve wird dann aus den de Boor-Punkten d r-k+1,...,d r wie folgt ermittelt:

35 §2-35 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines De Boor-Algorithmus Für t [ x r, x r+1 ) berechnet sich die B-Splinekurve aus mit Schema des de Boor-Algorithmus

36 §2-36 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 m-k+2 = 2 polynomiale Segmente d0d0 dmdm d2d2 d1d1 d3d3... x0x0 x1x1 x k-1 x m+1 x m+k

37 §2-37 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 d0d0 dmdm d2d2 d1d1 d3d3 x0x0 x1x1 x k-1 x m+1 x m+k t d4d4 d3d3 d2d t [ x 4, x 5 ) r=4

38 §2-38 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 d0d0 dmdm d2d2 d1d1 d3d3 x0x0 x1x1 x k-1 x m+1 x m+k t d4d4 d3d3 d2d d4d4 d3d3 2 2

39 §2-39 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines De Boor-Algorithmus 1. Beispiel: k=4, m=4 d0d0 dmdm d2d2 d1d1 d3d3 x0x0 x1x1 x k-1 x m+1 x m+k t d4d4 d3d3 d2d d4d4 d3d3 2 2 f(t)=d4f(t)=d4 3

40 §2-40 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 2. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... xrxr x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 t

41 §2-41 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 2. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... xrxr x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 t

42 §2-42 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 2. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... xrxr x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 t

43 §2-43 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 2. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... xrxr x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 t

44 §2-44 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 3. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... t=x r x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 Auswerten an einem Knoten

45 §2-45 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 3. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... t=x r x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 Auswerten an einem Knoten

46 §2-46 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines 3. Beispiel (k=5): d r-4 drdr d r-2 d r-3 d r-1... t=x r x r+1 r r-1 r+1 r-2 r-3 r+2 r+3 Auswerten an einem Knoten

47 §2-47 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines B-Splines Aus dem de Boor-Algorithmus ergeben sich die Basisfunktionen N i,k (t) (B-Splines) zu den einzelnen de Boor-Punkten d i (analog zu den Bernstein-Polynomen für Bézier-Kurven). [1] Rekursionsformel von de Boor und Cox sei eine nichtfallende Folge von Knoten.

48 §2-48 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Beispiel 1: = {0,1,2,3,4}, k=1,...,3

49 §2-49 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines

50 §2-50 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Beispiel 2: ={0,0,0,1,2,3,4,4,4}, k=1,...,3

51 §2-51 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines

52 §2-52 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines

53 §2-53 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Mit Hilfe dieser Basis Splines erhalten wir nun folgende Darstellung: [2]Definition: B (Basis)-Splinekurven (a)Das Kontrollpolygon d 0,...,d m, die Ordnung k (Grad k-1) und die m+k+1 Knoten x 0 x 1... x m+k definieren eine offene B-Splinekurve, gegeben durch

54 §2-54 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines (b)Das Kontrollpolygon d 0,...,d m, die Ordnung k (Grad k-1) und die m+2 Knoten x 0 x 1... x m+1 definieren eine geschlossene B-Splinekurve, gegeben durch wobei die fehlenden Knoten periodisch ergänzt werden: Diejenigen B-Splines, welche aus dem Intervall [ x 0,x m+1 ] herausragen, müssen am jeweils anderen Rand des Intervalls angetragen werden.

55 §2-55 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Beispiel (k=3, m=4): x0x0 x k-1 x m+1 x m+k d0d0 dkdk offene B-Splinekurve x0x0 x m+1 geschlossene B-Splinekurve d0d0 dmdm 0 m 0 m Freiformkurven und -flächen – B-Splines

56 §2-56 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Bemerkungen: 1.Jede Kontrollpunktänderung hat nur lokalen Einfluss. 2.Bei offenen B-Splinekurven werden die Randpunkte d 0 und d m interpoliert, wenn gilt: x 0 =...=x k-1 und x m+1 =...=x m+k. Die Knoten x 0 und x m+k haben keinen Einfluss auf den Kurvenverlauf. 3.Die Trägerintervalle der B-Splines sind wie folgt definiert: 2.9 Freiformkurven und -flächen – B-Splines

57 §2-57 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Satz: Convex-Hull und Variation-Diminishing Property (a)Jede Gerade schneidet eine ebene B-Splinekurve nicht öfter als das zugehörige B-Splinepolygon. (b)Die B-Splinekurve liegt in der konvexen Hülle des zugehörigen B-Splinepolygons. Genau genommen liegt jeder Kurvenpunkt in der konvexen Hülle von k lokalen Kontrollpunkten. Beweis: siehe [Lane:1983] Bemerkung: Liegen k aufeinander folgende Kontrollpunkte auf einer Geraden, so enthält auch die Kurve ein Geradensegment. 2.9 Freiformkurven und -flächen – B-Splines

58 §2-58 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splines Man kann B-Splinekurven in Bézier-Segmente umwandeln, indem man die Vielfachheit aller Knoten durch sukzessives Knoteneinfügen auf k-1 erhöht. Die B-Splines degenerieren dadurch zu Bersteinpolynomen.

59 §2-59 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – NURBS NURBS (non-uniform rational B-splines) Wegen der geringeren Datenmenge empfiehlt es sich oft, die B-Splinedarstellung einzusetzen. NURBS sind rationale, nicht- uniforme B-Splines, die besonders im CAD-Bereich Anwendung finden: Knoten-Sequenz {x 0,...., x n+k } Kontrollpunktmenge {d 0,....,d n } Gewichtesequenz {w 0,....,w n }

60 §2-60 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Splineflächen Splineflächen Splineflächen sind aus mehreren Patches (Flächensegmenten) zusammengesetzt. An den Trennkurven der Patches sind gewisse Stetigkeitsbedingungen für glatte Übergänge einzuhalten.

61 §2-61 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splineflächen B-Splineflächen Aus dem Tensorprodukt der Darstellung für B-Splinekurven gewinnt man B-Splineflächen. Für die Definition einer B- Splinefläche benötigt man also - zwei Ordnungen k und l - de Boor Punkte d ij (i=0,...,m; j=0,...,n) - zwei Knotenvektoren (x 0,..., x m+k ) und (y 0,..., y n+l ) B-Splineflächen können auch in eine oder beide Richtungen geschlossen sein (Zylindermantel, Torus).

62 §2-62 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splineflächen B-Splineflächen Die B-Spline-Darstellung ist erheblich kompakter als eine Darstellung der entsprechenden Patches. Die Parametrisierung ist durch die beiden Knotenvektoren festgelegt. y n+1 y l-1 x k-1 x m+1... (Definitions- bereich)

63 §2-63 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – B-Splineflächen B-Splineflächen Die Auswertung einer B-Splinefläche f(s,t) erfolgt mit dem de Boor-Algorithmus. Zuerst wertet man für jede Zeile von de Boor-Punkten eine B-Splinekurve d j := f j (s) aus, welche dann die Kontrollpunkte einer Flächenkurve f(t) (s = konst.) liefert. Alternativ dazu kann man auch folgende Summe auswerten:

64 §2-64 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Darstellung von NURBS in OpenGL Erzeugung eines NURBS-Objekts und Rückgabe des Zeigers darauf: GLUnurbsObj* gluNewNurbsRenderer(void); Definition der NURBS-Eigenschaften void gluNurbsProperty(GLUnurbsObj* nurbs, // erzeugtes NURBS-Objekt GLenum property, // Eigenschaft GLfloat value // Eigenschaftswert );

65 §2-65 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung NURBS-Eigenschaften und Eigenschaftswerte (Auswahl) Eigenschaft mögliche Werte GLU_SAMPLING_TOLERANCE value>0 GLU_DISPLAY_MODE GLU_FILL | GLU_OUTLINE_POLYGON | GLU_OUTLINE_PATCH GLU_CULLING GL_TRUE | GL_FALSE GLU_AUTO_LOAD_MATRIXGL_TRUE | GL_FALSE

66 §2-66 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Spezifikation eines Callbacks zur Fehlerbehandlung void gluNurbsCallback(GLUnurbsObj* nurbs, // erzeugtes NURBS-Objekt GLenum which, // Art des Callbacks: // GLU_ERROR void (*fn)(GLenum errorCode) // Funktionspointer des // Callbacks );

67 §2-67 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Beispiel einer Callback-Funktion void CALLBACK nurbsError(GLenum errorCode) { const GLubyte *estring; estring = gluErrorString(errorCode); fprintf (stderr, "Nurbs Error: %s\n", estring); exit (0); }

68 §2-68 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Spezifikation der NURBS- / B-Spline-Kurve Definition der NURBS-Eigenschaften void gluNurbsCurve(GLUnurbsObj* nurbs,// NURBS-Objekt GLint knotCount,// Knotenanzahl GLfloat *knots, // Knotenvektor GLint stride, // Offset zwischen // de Boor Punkten GLfloat *control,// de Boor Punkte GLint order, // Ordnung der // Kurve GLenum type // Typ der // darzustellenden // Kurve, z.B. // GL_MAP1_VERTEX3 // GL_MAP1_VERTEX4 );

69 §2-69 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Spezifikation der NURBS- / B-Spline-Fläche Definition der NURBS-Eigenschaften void gluNurbsSurface(GLUnurbsObj* nurbs,// NURBS-Objekt GLint uKnotNum, GLfloat* uknots, // Knotenvektor u GLint vKnotNum, GLfloat* vknots, // Knotenvektor v GLint ustride, GLint vstride // Offset zwischen // de Boor Punkten GLfloat *controlArray,// de Boor Punkte GLint uorder, GLint vorder // Ordnung der // Kurve GLenum type // Typ der // darzustellenden // Kurve, z.B. // GL_MAP1_VERTEX3 // GL_MAP1_VERTEX4 );

70 §2-70 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Darstellung der NURBS- / B-Spline-Kurve / -Fläche void gluBeginCurve(GLUnurbsObj* nurbs); gluNurbsCurve( ); void gluEndCurve(GLUnurbsObj* nurbs); bzw. void gluBeginSurface(GLUNnurbsObj* nurbs); gluNurbsSurface( ); void gluEndSurface(GLUnurbsObj* nurbs);

71 §2-71 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS Freiformkurven und -flächen – Darstellung Darstellung von NURBS in OpenGL Löschen eines NURBS-Renderer-Objekts: void gluDeleteNurbsRenderer(GLUnurbsObj* nurbs);

72 §2-72 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Aufgabe Ergänzen Sie das Beispielprogramm surface.c von der Website um folgende Eigenschaften: -Ermöglichen Sie eine Navigation um die Fläche mit Hilfe der Maus -Ermöglichen Sie eine Modifikation einzelner Kontrollpunkte z.B. mit Hilfe der Tastatur (z.B. Springen von einem Kontrollpunkt zum anderen auf Tastendruck, Einfärben des jeweils aktiven Kontrollpunkts, Verschieben des Kontrollpunkts auf Tastendruck.)


Herunterladen ppt "§2-1 §2 Darstellung geometrischer Objekte, Farbe, Beleuchtung Visualisierung mit C++ / OpenGL - SS 2005 Aufgabe Modellieren Sie mittels Bézier-Kurven einen."

Ähnliche Präsentationen


Google-Anzeigen