kevin keul - userpages.uni-koblenz.decg/ss13/cg3/cg3_uebung_3.pdf · kevin keul arbeitsgruppe...
TRANSCRIPT
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Ubungsstunde 3 zu Computergrafik 3
Kevin Keul
Institut fur ComputervisualistikUniversitat Koblenz
01. Juli 2013
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Inhaltsverzeichnis
1 B-SplinesWiederholungErweiterung: Nicht uniforme Knotenvektoren (NURBS)Erweiterung: GewichteErweiterung: Flachen
2 Aufgabe 1: B-SplinesB-Splines und NURBS
3 Aufgabe 2: Zweifacher DeCasteljauAllgemeinesAufgabe 2
4 Implementierung
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Wiederholung
B-Splines (Basis-Splines) bieten eine einfache, aber machtigeReprasentation von Kurven und Freiformflachen
Bezier-Kurven sind ein Spezialfall von B-Splines
Lokale Kontrolle (Kontrollpunkte andern Kurven nur lokal)
Anzahl der Kontrollpunkte beeinflusst nicht die Komplexitatder Kurve
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Wiederholung
Frage
Wann ist ein B-Spline eine Bezier-Kurve?
Antwort
Wenn der Knotenvektor nur aus Nullen und Einsen besteht, also n= k gilt.
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Wiederholung
Frage
Wann ist ein B-Spline eine Bezier-Kurve?
Antwort
Wenn der Knotenvektor nur aus Nullen und Einsen besteht, also n= k gilt.
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Wiederholung
B-Splines: Formale Definition
Formel
C (t) =∑n
i=1 BiNi ,k(t)
n = Anzahl der Kontrollpunkte
k = Ordnung
Bi sind die Kontrollpunkte
Ni ,k(t) sind die Basisfunktionen (Cox-de-Boor-Rekursion)
Basisfunktionen
Ni ,k =(t−xi )Ni,k−1(t)
xi+k−1−xi+
(xi+k−t)Ni+1,k−1(t)xi+k−xi+1
Ni ,1(t) =
{1 wenn xi ≤ t < xi+1
0 sonst
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Wiederholung
Frage
Wie ist nun das genaue Vorgehen fur das Rendern eines B-Splines?
Antwort
1 Benutzer definiert Kontrollpunkte.
2 Grad des Splines wird definiert (entweder durch Benutzer oderintern)
3 Definition, ob geschlossene oder offene Kurve
4 Automatische Berechnung des uniformen Knotenvektors(offen oder periodisch)
5 Automatische Berechnung des gultigen Parameterbereichs
6 Schleife uber Parameter t im gultigen Parameterbereich,Werte der Basisfunktionen fur jedes t werden bestimmt
7 Punkt auf der Kurve ergibt sich mit Hilfe der Kontrollpunkte(P(t) = ...)
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Nicht uniforme Knotenvektoren (NURBS)
Durch Ordnung und Wahl von offenem oder perdiodischemTyp ist ein uniformer Knotenvektor eindeutig definiert
Knotenvektoren konnen aber auch ungleichmaßige(nicht-uniforme) Abstande haben: [0 0.2 0.9 2.6 2.7 2.7 2.7 3]
Die geometrische Deutung ist schwierig
Der Knotenvektor beeinflusst die Basisfunktionen, diesewiederum das Aussehen der Kurve
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Nicht uniforme Knotenvektoren (NURBS)
Uniformer Knotenvektor
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Nicht uniforme Knotenvektoren (NURBS)
Nicht-uniformer Knotenvektor
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Gewichte
Warum Gewichte?
Gewichte erhohen die Flexibilitat
Jedem Kontrollpunkt kann ein Gewicht zugewiesen werden
Aber: Wenig Verwendung in der ”echten Welt”
Eigenschaften von Gewichten
Alle Gewichte = 1 → Normales B-Spline
Ein Gewicht zwischen 0 und 1 reduziert den Einfluss desPunktes, ein Wert > 1 zieht die Kurve naher an den Punkt
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Gewichte
Rationale B-Splines
C (t) =∑n
i=1 Bhi Ni ,k(t)
Projektion in 3D
C (t) =∑n
i=1 BihiNi,k (t)∑ni=1 hiNi,k (t)
Selbe Basisfunktionen wie B-Splines
Negative Gewichte sind moglich, aber ”bose”
Eselsbrucke: Rationale Zahlen: Bruche
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Gewichte
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Flachen
Zusatzliche parametrische Richtung
S(u, v) =∑n
i=1
∑mj=1 B
hi ,jNi ,k(u)Mj ,l(v)
n × m Kontrollpunkte
Der Grad kann fur jede parametrische Richtung einzelnfestgelegt werden
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Erweiterung: Flachen
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
Wdh.: Grad und Ordnung
Grad beeinflusst die Anzahl der Kontrollpunkte, die aktiv aneinem bestimmten Punkt Einfluss ausuben
Achtung: Ordnung k = Grad + 1
Maximal: k = n
Maximaler Grad: Anzahl Kontrollpunkte - 1
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
Offene Knotenvektoren
n+k Elemente
monoton steigend
k Wiederholungen der Werte am Anfang und Ende
Beispiel
k = 1: [0 1 2 3]k = 2: [0 0 1 2 2]k = 3: [0 0 0 1 1 1]
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
Periodische Knotenvektoren
k - 1 Elemente am Anfang und Ende ”gelten” nicht.
Beispiel
k = 1: [0 1 2 3], gultig fur 0 ≤ t < 3k = 2: [ 6 0 1 2 3 6 4], gultig fur 1 ≤ t < 3k = 3: [ 6 0 6 1 2 3 6 4 6 5], gultig fur 2 ≤ t < 3
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.1
Berechnen Sie N1,2, N2,2, N3,2 fur den Bereich 2 ≤ t < 3!
Basisfunktionen
Ni ,k =(t−xi )Ni,k−1(t)
xi+k−1−xi+
(xi+k−t)Ni+1,k−1(t)xi+k−xi+1
Ni ,1(t) =
{1 wenn xi ≤ t < xi+1
0 sonst
Knotenvektor
k = 2: [ 6 0 1 2 3 6 4], gultig in 1 ≤ t < 3
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
Welches Ergebnis wurden wir erwarten? Dies konnen wir durchSkizzieren der Basisfunktionen beantworten.
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.1
Berechnen Sie N1,2, N2,2, N3,2 fur den Bereich 2 ≤ t < 3!
N1,2
N1,2 =(t−x1)N1,1
x2−x1+
(x3−t)N2,1
x3−x2
N1,2 = (t−0)01 + (2−t)0
1 = 0
N2,2
N2,2 =(t−x2)N2,1
x3−x2+
(x4−t)N3,1
x4−x3
N2,2 = (t−1)01 + (3−t)1
1 = 3− t
N3,2
N3,2 = (t−2)11 + (4−t)0
1 = t − 2
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.2
Bestimmen Sie den Punkt P(t) auf der Kurve fur t = 2.
Berechnete Basisfunktionen
N1,2(t) = 0
N2,2(t) = 3− t
N3,2(t) = t − 2
Einsetzen in die B-Spline-Gleichung
Gleichung: P(t) = B1N1,2(t) + B2N2,2(t) + B3N3,2(t)
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.2
Bestimmen Sie den Punkt P(t) auf der Kurve fur t = 2.
Berechnete Basisfunktionen
N1,2(t) = 0
N2,2(t) = 3− t
N3,2(t) = t − 2
Einsetzen in die B-Spline-Gleichung
Gleichung: P(t) = B1N1,2(t) + B2N2,2(t) + B3N3,2(t)
B10 + B2(3− t) + B3(t − 2)
Fur t=2: P(2) = B2(3− 2) + B3(2− 2) = B2
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.3 NURBS-Punktevaluation
Evaluation an gleicher Stelle, aber B2 wird mit w2 = 10 gewichtet.
NURBS-Gleichung
P(t) =w1B1N1,2(t)+w2B2N2,2(t)+w3B3N3,2(t)
w1N1,2(t)+w2N2,2(t)+w3N3,2(t)
Eingesetzt
P(t) =B1N1,2(t)+10B2N2,2(t)+B3N3,2(t)
10
= 10B210 = B2
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.4
Wieso kommt bei gleichem Parameterwert, aber verschiedenenGewichten das selbe Ergebnis raus?
Uberlegungen
Ordnung 2 → Grad ist linear, also simple Verbindung derKontrollpunkte
Ein Gewicht > 1 zieht die Kurve naher an den Kontrollpunkt
Dies macht im linearen Fall keinen Unterschied
Auch ein Gewicht < 1 wurde die Kurve im linearen Fall nichtandern
Folglich: Gewichte spielen bei Ordnung 2 keine Rolle
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.5
Gewicht von 0
Kann das Gewicht eines Punktes auch 0 sein?
NURBS-Gleichung
P(t) =w1B1N1,2(t)+w2B2N2,2(t)+w3B3N3,2(t)
w1N1,2(t)+w2N2,2(t)+w3N3,2(t)
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
B-Splines und NURBS
A 1.5
Gewicht von 0
Eliminiert den Einfluss eines Punktes
Erzeugt ggf. Singularitat (undefinierter Punkt)
w2 = 10→ 10B2
10 = B2
w2 = 0→ 0B2
0 = . . .
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Allgemeines
Uberlegungen
Evaluationen auf Bezier-Patches konnen mit demDeCasteljau-Algorithmus berechnet werden
Prinzip: Mehrfache Anwendung dieses Algorithmus
S(u, v) =∑n
i=0
∑mj=0 Bi ,jNni (u)Mmj(v)
anders hingeschrieben:S(u, v) =
∑ni=0Nni (u)
∑mj=0 Bi ,jMmj(v)
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Allgemeines
Was bedeutet das?
Erst Punkte auf allen Kurven in v-Richtung berchnen
Dann zwischen diesen berechneten Punkten in der eigentlichgewunschten u-Richtung rechnen
Die Reihenfolge der Richtung ist egal!
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
A 2.1
Gegeben: Alle Kontrollpunkte fur ein 3× 3 Bezier-Patch
Gesucht: Funktionswerte an den Stellenu = 0.5, v = 0.5u = 0.75, v = 0.75
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
A 2.1
u-Richtung
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
A 2.1
u-Richtung
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
A 2.1
u-Richtung
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
Die Ergebnisse der letzten Schritte liefern die Kontrollpunkteeiner neuen Bezier-Kurve
Selbes Verfahren noch einmal auf sie anwenden.
Anmerkung: Der Algorithmus wurde nur anhand des Hohenwertesdemonstriert. Tatsachlich mussen Punkte verwendet werden (hier:(2.0, 1.875, 2.0)).
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
A 2.1
Nun fur u = 0.75 und v = 0.75.
Was bedeutet das?
0.25 ·Wertlinks + 0.75 ·Wertrechts
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
A 2.1
Nun fur u = 0.75 und v = 0.75.
Was bedeutet das?
0.25 ·Wertlinks + 0.75 ·Wertrechts
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Aufgabe 2
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
OpenGL bietet die Moglichkeit, Bezier-Patches zu rendern
Nur Triangulierung
D. h.: An die Grafikhardware gehen nach wie vor nur Dreiecke
Vorgehen
1 Datenstruktur fur Kontrollpunkte anlegen
2 Initialisierung der OpenGL-Umgebung (Evaluator anlegen)
3 Zeichnen des Patches
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Datenstruktur: 2D-Array von 3D-Vektoren
GLfloat points[NUMX][NUMZ ][3] = {
{ {1,2,1}, {1,0,2}, {1,2,3} },
{ {2,0,1}, {2,6,2}, {2,0,3} },
{ {3,0,1}, {3,0,2}, {3,2,2} }
};
Ein Zugriff auf points[1,1,1] ist beispielsweise die y-Koordinatedes mittleren Punktes (6).
OpenGL erwartet die Punktdaten in einem solchen Format
Bei Laden von externen Daten mussen sie ggf. in ein solchesArray kopiert werden
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Vorgehen in OpenGL
2D Evaluator initialisieren
glMap2f(GL_MAP2_VERTEX_3 , 0, 1, 3, 3, 0, 1,
3*3, 3, &points [0][0][0]);
Signatur:
void glMap2f(GLenum target , GLfloat u1 ,
GLfloat u2 , GLint ustride , GLint uorder ,
GLfloat v1 , GLfloat v2 , GLint vstride , GLint
vorder , const GLfloat *points);
Definiert wie Punkte auf einer Oberflache berechnet werden.Das ”Ergebnis” eines Evaluators sind normaleOpenGL-Befehle, z. B.: glVertex, glNormal, glTexCord,glColor
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
void glMap2f(GLenum target , GLfloat u1 , GLfloat
u2 , GLint ustride , GLint uorder ,
GLfloat v1 , GLfloat v2 , GLint vstride , GLint
vorder , const GLfloat *points);
target: Format, in dem die Punkte vorliegen
u1, u2: Parameterbereich
uStride: Anzahl Float-Werte bis zum nachsten Kontrollpunkt
uorder: Ordnung d. Basisfunktion
Analog fur v
points: zeigt auf Array der Kontrollpunkte
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Evaluator und automatische Normalberechnung
glEnable(GL_MAP2_VERTEX_3);
glEnable(GL_AUTO_NORMAL);
Parameterpaare fur (u,v) erzeugen, die der Evaluator als Eingabebenutzt
glMapGrid2f (30, 0, 1, 30, 0, 1);
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
void glMapGrid2f(GLint un , GLfloat u1 , GLfloat
u2 , GLint vn , GLfloat v1, GLfloat v2);
Evaluator allgemein
un: Anzahl der Stellen, an denen ein Punkt evaluiert wird
u1: Beginn des Parameterbereiches
u2: Ende des Parameterbereiches
Analog fur v
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3
B-Splines Aufgabe 1: B-Splines Aufgabe 2: Zweifacher DeCasteljau Implementierung
Nun muss in der display() noch gezeichnet werden:
glEvalMesh2(GL_FILL , 0, 30, 0, 30);
glEvalMesh2 ruft Evaluator auf, welcher mit den vorhergesetzten Parametern Dreiecke generiert und an dieGrafikhardware ubergibt
Mit GL POINT, GL LINE oder GL FILL wird bestimmt, wiegezeichnet wird
Damit lassen sich auch B-Splines oder NURBS rendern
Kevin Keul Arbeitsgruppe Computergrafik
Ubungsstunde 3 zu Computergrafik 3