Grafische Datenverarbeitung

5 Szenenbeschreibung 2

Welche Mathematischen Darstellungsarten gibt es um Kurven abzubilden?
Freiform-Kurven
 Bêzier-Kurven
 B-Spline-Kurven
 NURBS-Kurven

Welche Mathematischen Darstellungsformen gibt es um Kurven abzubilden?
Explizite-Darstellung: f(x)=X^2...
Parameterdarstellung: P(p)=(x(p) , y(p))T
Beispiele:
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.

Eindimensionale Evaluatoren
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();