glEvalMesh: Unterschied zwischen den Versionen
(Korrekturvorschlag) |
K (→Links) |
||
(7 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= glEvalMesh = | = glEvalMesh = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''glEvalMesh1, glEvalMesh2''' - Zeichnet eine [[Evaluator]] Kurve (1D) oder ein Gitter (2D). | '''glEvalMesh1, glEvalMesh2''' - Zeichnet eine [[Evaluator]] Kurve (1D) oder ein Gitter (2D). | ||
Zeile 10: | Zeile 11: | ||
procedure '''glEvalMesh2'''(''mode'': TGLenum; ''i1'': TGLint; ''i2'': TGLint; ''j1'': TGLint; ''j2'': TGLint); | procedure '''glEvalMesh2'''(''mode'': TGLenum; ''i1'': TGLint; ''i2'': TGLint; ''j1'': TGLint; ''j2'': TGLint); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
Zeile 20: | Zeile 22: | ||
|- | |- | ||
! ''i1, i2,<br> j1, j2'' | ! ''i1, i2,<br> j1, j2'' | ||
− | | | + | | ''i1'', ''i2'' legt fest bei welchem Vertex, der von [[glMapGrid]]1 generierten Vertex-Reihe, die Kurve beginnt und bei welchem sie aufhört. Bei einem Gitter (glMapGrid2) werden alle Vertizes die in dem von Vertex (i1/j1) und (i2/j2) begrenzten Rechteck liegen gezeichnet. |
|} | |} | ||
− | + | ||
+ | |||
== Beschreibung == | == Beschreibung == | ||
− | |||
− | '''glEvalMesh''' | + | '''glEvalMesh''' und [[glMapGrid]] werden gemeinsam genutzt, um auf effiziente Art und Weise Bézierkurven oder -flächen zu berechnen und zu rendern. |
+ | |||
+ | Nachdem mit [[glMap1]] oder [[glMap2]] die Kontrollpunkte einer Bézierkurve oder -fläche festgelegt wurden, errechnet [[glMapGrid]] daraus ein ein- oder zweidimensionales Punkte-Gitter mit gleichmäßig verteilten Punkten, welches danach mit '''glEvalMesh''' gezeichnet werden kann. | ||
''mode'' bestimmt wie die entstehenden Punkte verbunden werden sollen. Entweder werden sie als Punkte dargestellt, zu Linien verbunden oder zu einem Polygon gemacht (indem die Linien gefüllt werden). | ''mode'' bestimmt wie die entstehenden Punkte verbunden werden sollen. Entweder werden sie als Punkte dargestellt, zu Linien verbunden oder zu einem Polygon gemacht (indem die Linien gefüllt werden). | ||
Im eindimensionales Fall, '''glEvalMesh1''', wird das Netz auf die gleiche Art erstellt, als wie wenn der nachfolgende Code ausgeführt werden würde: | Im eindimensionales Fall, '''glEvalMesh1''', wird das Netz auf die gleiche Art erstellt, als wie wenn der nachfolgende Code ausgeführt werden würde: | ||
− | <pascal>glBegin(EIN_GL_TYPE); | + | <source lang="pascal">glBegin(EIN_GL_TYPE); |
for i := i1 to i2 do | for i := i1 to i2 do | ||
glEvalCoord1( i*du +u1); | glEvalCoord1( i*du +u1); | ||
− | glEnd;</ | + | glEnd;</source> |
wobei | wobei | ||
Zeile 54: | Zeile 58: | ||
wobei ''n, u1, u2, m, v1, v2'' die Argumente des aller letzten [[glMapGrid]]2 Befehls sind. Wenn dann ''mode'' '''GL_FILL''' ist, entspricht der Aufruf von '''glEvalMesh''' dem folgenden Code: | wobei ''n, u1, u2, m, v1, v2'' die Argumente des aller letzten [[glMapGrid]]2 Befehls sind. Wenn dann ''mode'' '''GL_FILL''' ist, entspricht der Aufruf von '''glEvalMesh''' dem folgenden Code: | ||
− | <pascal>for j := j1 to j2 do | + | <source lang="pascal">for j := j1 to j2 do |
begin | begin | ||
glBegin(GL_QUAD_STRIP); | glBegin(GL_QUAD_STRIP); | ||
Zeile 63: | Zeile 67: | ||
end; | end; | ||
glEnd; | glEnd; | ||
− | end; </ | + | end; </source> |
Wenn ''mode'' gleich '''GL_LINE''' ist dann entspricht der Aufruf von '''glEvalMesh2''' dem folgenden Code: | Wenn ''mode'' gleich '''GL_LINE''' ist dann entspricht der Aufruf von '''glEvalMesh2''' dem folgenden Code: | ||
− | <pascal>for j := j1 to j2 do | + | <source lang="pascal">for j := j1 to j2 do |
begin | begin | ||
glBegin(GL_LINE_STRIP); | glBegin(GL_LINE_STRIP); | ||
Zeile 79: | Zeile 83: | ||
glEvalCoord2( i*du +u1, j*dv +v1 ); | glEvalCoord2( i*du +u1, j*dv +v1 ); | ||
glEnd; | glEnd; | ||
− | end; </ | + | end; </source> |
Wenn ''mode'' gleich '''GL_POINT''' ist dann entspricht der Aufruf von '''glEvalMesh2''' dem folgenden Code: | Wenn ''mode'' gleich '''GL_POINT''' ist dann entspricht der Aufruf von '''glEvalMesh2''' dem folgenden Code: | ||
− | <pascal>glBegin(GL_POINTS); | + | <source lang="pascal">glBegin(GL_POINTS); |
for j := j1 to j2 do | for j := j1 to j2 do | ||
for i := i1 to i2 do | for i := i1 to i2 do | ||
glEvalCoord2( i*du +u1, j*dv +v1 ); | glEvalCoord2( i*du +u1, j*dv +v1 ); | ||
− | glEnd;</ | + | glEnd;</source> |
In allen drei Fällen ist es unbedingt notwendig, dass für ''i=n'' gelten muss, dass der berechneten Wert ''i*du +u1'' exakt ''u2'' und für ''j=m'' der berechnete Wert ''j*dv +v1'' exakt ''v2'' sein muss! | In allen drei Fällen ist es unbedingt notwendig, dass für ''i=n'' gelten muss, dass der berechneten Wert ''i*du +u1'' exakt ''u2'' und für ''j=m'' der berechnete Wert ''j*dv +v1'' exakt ''v2'' sein muss! | ||
− | + | ||
+ | |||
+ | |||
== Hinweise == | == Hinweise == | ||
Bitte beachten Sie die angesprochenen Bedingungen für die Fälle ''i=n'' bzw. ''j=m''. | Bitte beachten Sie die angesprochenen Bedingungen für die Fälle ''i=n'' bzw. ''j=m''. | ||
− | + | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
'''GL_INVALID_ENUM''' wird generiert wenn ''mode'' einen ungültigen Wert besitzt.<br> | '''GL_INVALID_ENUM''' wird generiert wenn ''mode'' einen ungültigen Wert besitzt.<br> | ||
'''GL_INVALID_OPERATION''' wird generiert wenn FUNCTIONNAME innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. | '''GL_INVALID_OPERATION''' wird generiert wenn FUNCTIONNAME innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. | ||
− | + | ||
+ | |||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
Zeile 107: | Zeile 115: | ||
[[glGet]] mit Token [[glGet#GL_MAP2_GRID_SEGMENTS|GL_MAP2_GRID_SEGMENTS]] | [[glGet]] mit Token [[glGet#GL_MAP2_GRID_SEGMENTS|GL_MAP2_GRID_SEGMENTS]] | ||
− | + | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
Zeile 113: | Zeile 122: | ||
== Links == | == Links == | ||
− | *[ | + | *[[Tutorial_Abseits_eckiger_Welten| DGL Tutorial: Abseits eckiger Welten]] |
[[Kategorie:GL|EvalMesh]] | [[Kategorie:GL|EvalMesh]] | ||
+ | [[Kategorie:GL1.0|EvalMesh]] |
Aktuelle Version vom 15. Juli 2011, 01:31 Uhr
Inhaltsverzeichnis
glEvalMesh
Name
glEvalMesh1, glEvalMesh2 - Zeichnet eine Evaluator Kurve (1D) oder ein Gitter (2D).
Delphi-Spezifikation
procedure glEvalMesh1(mode: TGLenum; i1: TGLint; i2: TGLint); procedure glEvalMesh2(mode: TGLenum; i1: TGLint; i2: TGLint; j1: TGLint; j2: TGLint);
Parameter
mode | Für glEvalMesh1: Legt fest ob die Evaluator Kurve eine Linie ist, oder nur aus einzelnen Punkten besteht. Akzeptierte symbolische Konstanten sind: GL_POINT und GL_LINE. Für glEvalMesh2: Bestimmt ob zweidimensionales Netz von Punkten, Linen oder Polygonen erstellt werden soll. Akzeptierte symbolische Konstanten sind: GL_POINT, GL_LINE und GL_FILL |
---|---|
i1, i2, j1, j2 |
i1, i2 legt fest bei welchem Vertex, der von glMapGrid1 generierten Vertex-Reihe, die Kurve beginnt und bei welchem sie aufhört. Bei einem Gitter (glMapGrid2) werden alle Vertizes die in dem von Vertex (i1/j1) und (i2/j2) begrenzten Rechteck liegen gezeichnet. |
Beschreibung
glEvalMesh und glMapGrid werden gemeinsam genutzt, um auf effiziente Art und Weise Bézierkurven oder -flächen zu berechnen und zu rendern.
Nachdem mit glMap1 oder glMap2 die Kontrollpunkte einer Bézierkurve oder -fläche festgelegt wurden, errechnet glMapGrid daraus ein ein- oder zweidimensionales Punkte-Gitter mit gleichmäßig verteilten Punkten, welches danach mit glEvalMesh gezeichnet werden kann.
mode bestimmt wie die entstehenden Punkte verbunden werden sollen. Entweder werden sie als Punkte dargestellt, zu Linien verbunden oder zu einem Polygon gemacht (indem die Linien gefüllt werden).
Im eindimensionales Fall, glEvalMesh1, wird das Netz auf die gleiche Art erstellt, als wie wenn der nachfolgende Code ausgeführt werden würde:
glBegin(EIN_GL_TYPE);
for i := i1 to i2 do
glEvalCoord1( i*du +u1);
glEnd;
wobei
ist und n, u1 sowie u2 die Argumente des aller letzten glMapGrid1 Befehle sind. EIN_GL_TYPE ist GL_POINTS wenn mode GL_POINT ist, oder GL_LINES falls mode GL_LINE ist.
Eine absolut wichtige Bedingung ist, dass bei i=n der berechnete Wert i*du + u1 genau dem Wert u2 entsprechen muss!
Für den zweidimensionalen Fall, glEvalMesh2 gilt
du = (u2-u1)/n
dv = (v2-v1)/m
wobei n, u1, u2, m, v1, v2 die Argumente des aller letzten glMapGrid2 Befehls sind. Wenn dann mode GL_FILL ist, entspricht der Aufruf von glEvalMesh dem folgenden Code:
for j := j1 to j2 do
begin
glBegin(GL_QUAD_STRIP);
for i := i1 to i2 do
begin
glEvalCoord2( i*du +u1, j*dv +v1 );
glEvalCoord2( i*du +u1, (j+1)*dv +v1 );
end;
glEnd;
end;
Wenn mode gleich GL_LINE ist dann entspricht der Aufruf von glEvalMesh2 dem folgenden Code:
for j := j1 to j2 do
begin
glBegin(GL_LINE_STRIP);
for i := i1 to i2 do
glEvalCoord2( i*du +u1, j*dv +v1 );
glEnd;
end;
for i := i1 to i2 do
begin
glBegin(GL_LINE_STRIP);
for j := j1 to j2 do
glEvalCoord2( i*du +u1, j*dv +v1 );
glEnd;
end;
Wenn mode gleich GL_POINT ist dann entspricht der Aufruf von glEvalMesh2 dem folgenden Code:
glBegin(GL_POINTS);
for j := j1 to j2 do
for i := i1 to i2 do
glEvalCoord2( i*du +u1, j*dv +v1 );
glEnd;
In allen drei Fällen ist es unbedingt notwendig, dass für i=n gelten muss, dass der berechneten Wert i*du +u1 exakt u2 und für j=m der berechnete Wert j*dv +v1 exakt v2 sein muss!
Hinweise
Bitte beachten Sie die angesprochenen Bedingungen für die Fälle i=n bzw. j=m.
Fehlermeldungen
GL_INVALID_ENUM wird generiert wenn mode einen ungültigen Wert besitzt.
GL_INVALID_OPERATION wird generiert wenn FUNCTIONNAME innerhalb eines glBegin-glEnd Blocks aufgerufen wird.
Zugehörige Wertrückgaben
glGet mit Token GL_MAP1_GRID_DOMAIN
glGet mit Token GL_MAP2_GRID_DOMAIN
glGet mit Token GL_MAP1_GRID_SEGMENTS
glGet mit Token GL_MAP2_GRID_SEGMENTS
Siehe auch
glBegin, glEvalCoord, glEvalPoint, glMap1, glMap2, glMapGrid