5 Szenenbeschreibung 2
Welche Mathematischen Darstellungsarten gibt
es um Kurven abzubilden?
Freiform-Kurven
Bêzier-Kurven
B-Spline-Kurven
NURBS-Kurven
Gerade in
der x-y-Ebene: p = p0 + t · r p0: Punkt auf der Gerade r: Richtungsvektor Kreis in der x-y-Ebene mit Mittelpunkt m und Radius r in trigonometrischer Parameterdarstellung: x = mx + r · cos t, y = my + r · sin t, t Î [0 , 2PI) |
Unterschiede in der Anwendung von der
Explizite- und Parameterdarstellungsform.
Parameterdarstellung: einfache Berechnung der Punkte auf der Kurve, schwierige
Berechnung ob ein Punkt auf der Kurve ist oder nicht
Explizit-Darstellung: Zur Bestimmung der Punkte auf der Kurve Nullstellen suche,
aber einfache Berechnung ob ein Punkt auf der Kurve ist oder nicht, einsetzte
und auf 0 Prüfen.
Bêzier und B-Spline gemeinsamkeiten und
unterschiede.
Beide haben Konvexen-Hüllen Eigenschaft
Beide haben das Verhalten in Anfangs und Endpunkten, dass die Segmente da
tangential zur Kurve sind.
Bêzier-Auswertung: de Casteljau Algorthmus
B-Splines-Auswertung: de Boor
Bêzier: Veränderung eines Punktes wirkt sich an der Ganzen Kurve aus
B-Splines: Veränderung eines Punktes wirkt sich nur Lokal ab.
OpenGL-
2D Kurven in OpenGL
OpenGL stellt mit den Evaluatoren (engl. evaluators)
einen Mechanismus zur Verfügung, um Punkte auf Kurven und Flächen zu berechnen.
Mathematische Grundlage der Evaluatoren ist die Bézier-Technik.
GLU stellt darüber hinaus noch eine Programmierschnittstelle zur
Verwaltung und
Darstellung von NURBS-Kurven und NURBSFlächen zur Verfügung.
Symbolische Konstante | Interpretation |
GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP1_INDEX GL_MAP1_COLOR_4 GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 |
x,y,z
Punktkoordinaten x,y,z,w Punktkoordinaten Farbindex R, G, B, A Farbwerte Normalenvektoren s Texturkoordinaten s, t Texturkoordinaten s, t, r Texturkoordinaten s, t, r, q Texturkoordinaten |
Eindimensionale Evaluatoren (Kurven)
void glMap1{f d}(GLenum target, TYPE u1, TYPE u2,
GLint stride, GLint order, const TYPE *points);
Beschreibung
Definition einer Bézier-Kurve
Der Parameter target gibt an, wie die Kontrollpunkte zu interpretieren sind
(siehe folgende Tabelle).
Der Parameterbereich ist [u1,u2].
stride legt die Anzahl der Koordinaten eines Kontrollpunktes fest
order bezeichnet die Ordnung (= Grad+1) der Bézier-Kurve
points ist ein Zeiger auf ein Feld von Kontrollpunkten
void glEvalCoord1{f
d}{v}(TYPE u);
Beschreibung
Auswertung einer definierten und aktivierten Bézier-Kurve für den Parameter
u
Bemerkung
Vor der Auswertung muss die Bézier-Kurve z.B. durch
glEnable(GL_MAP1_VERTEX_3) aktiviert werden.
void glMapGrid1{f
d}(GLint n, TYPE u1, TYPE u2);
Beschreibung
Definition von n+1 äquidistanten Parameterwerten zwischen u1 und u2
void glEvalMesh1(GLenum
mode, GLint p1, GLint p2);
Beschreibung
Auswertung einer Bézier-Kurve an vorher festgelegten
Parameterwerten: 0 £ p1, p2 £ n
mode legt fest, ob nur Punkte berechnet (GL_POINT) oder diese durch Strecken (GL_LINES)
verbunden werden sollen.
Beispiel
//Definition der Bézier-Kurve
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, ctrlpoints);
// Aktivierung
glEnable(GL_MAP1_VERTEX_3);
// Auswertung der Bézier-Kurve und Darstellung als
Polygonzug
glBegin(GL_LINE_STRIP);
for (i=0; i<=30; i++)
glEvalCoord1f((GLfloat) i/30.0);
glEnd();