glEvalMesh: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
(Neuer Artikel - Bitte korrekturlesen)
Zeile 1: Zeile 1:
{{Offline}}
+
= glEvalMesh =
 +
 
 +
<br>
 +
== Name ==
 +
'''glEvalMesh1]], [[glEvalMesh2''' - Berechnen ein ein- oder zweidimensionales Punkt- oder Liniengitter.
 +
 
 +
<br>
 +
== Delphi-Spezifikation ==
 +
procedure '''glEvalMesh1'''(''mode'': TGLenum; ''i1'': TGLint; ''i2'': TGLint);
 +
procedure '''glEvalMesh2'''(''mode'': TGLenum; ''i1'': TGLint; ''i2'': TGLint; ''j1'': TGLint; ''j2'': TGLint);
 +
 
 +
<br>
 +
 
 +
== Parameter ==
 +
 
 +
{| border="1" rules="all"
 +
! ''mode''
 +
| Für '''glEvalMesh1''': Bestimmt ob ein eindimensionales Netz von Punkten oder Linen erstellt werden soll. Akzeptierte symbolische Konstanten sind: '''GL_POINT''' und '''GL_LINE'''.<br>
 +
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,<br> j1, j2''
 +
| Legen den ersten und letzten ganzzahligen Wert für die Raster-Gebiets-Variable (engl.: grid domain variable) ''i'' bzw. ''j'' fest.
 +
|}
 +
 
 +
<br>
 +
 
 +
== Beschreibung ==
 +
[[glMapGrid]] und '''glEvalMesh''' werden gemeinsam genutzt um auf effiziente Art und Weise eine Serie von gleichmäßig verteilten Karten-Gebiets-Werten (engl.: map domain values) zu erstellen und auszuwerten.
 +
 
 +
'''glEvalMesh''' läuft durch den Integer-Bereich eines ein- oder zweidimensionalen Gitters, dessen Ausdehnung das Gebiet der Auswertungskarten ist, die durch [[glMap1]] und [[glMap2]] festgelegt wurden.
 +
 
 +
''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:
 +
<pascal>glBegin(EIN_GL_TYPE);
 +
for i := i1 to i2 do
 +
    glEvalCoord1( i*du +u1);
 +
glEnd;</pascal>
 +
 
 +
wobei
 +
<div align="center">''du=(u2-u1)/n''</div>
 +
 
 +
ist und ''n, u1'' sowie ''u2'' die Argumente des aller letzten [[glMapGrid]]1 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
 +
 
 +
<div align="center">''
 +
du = (u2-u1)/n <br>
 +
dv = (v2-v1)/m''
 +
</div>
 +
 
 +
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
 +
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; </pascal>
 +
 
 +
Wenn ''mode'' gleich '''GL_LINE''' ist dann entspricht der Aufruf von '''glEvalMesh2''' dem folgenden Code:
 +
<pascal>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; </pascal>
 +
 
 +
Wenn ''mode'' gleich '''GL_POINT''' ist dann entspricht der Aufruf von '''glEvalMesh2''' dem folgenden Code:
 +
<pascal>glBegin(GL_POINTS);
 +
for j := j1 to j2 do
 +
  for i := i1 to i2 do
 +
      glEvalCoord2( i*du +u1, j*dv +v1 );
 +
glEnd;</pascal>
 +
 
 +
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!
 +
 
 +
<br>
 +
== Hinweise ==
 +
Bitte beachten Sie die angesprochenen Bedingungen für die Fälle ''i=n'' bzw. ''j=m''.
 +
 
 +
<br>
 +
== Fehlermeldungen ==
 +
'''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.
 +
 
 +
<br>
 +
 
 +
==  Zugehörige Wertrückgaben ==
 +
[[glGet]] mit Token [[glGet#GL_MAP1_GRID_DOMAIN|GL_MAP1_GRID_DOMAIN]]<br>
 +
[[glGet]] mit Token [[glGet#GL_MAP2_GRID_DOMAIN|GL_MAP2_GRID_DOMAIN]]<br>
 +
[[glGet]] mit Token [[glGet#GL_MAP1_GRID_SEGMENTS|GL_MAP1_GRID_SEGMENTS]]<br>
 +
[[glGet]] mit Token [[glGet#GL_MAP2_GRID_SEGMENTS|GL_MAP2_GRID_SEGMENTS]]
 +
 
 +
<br>
 +
 
 +
== Siehe auch ==
 +
[[glBegin]], [[glEvalCoord]], [[glEvalPoint]], [[glMap1]], [[glMap2]], [[glMapGrid]]
 +
 
 +
[[Kategorie:GL|EvalMesh]]

Version vom 22. Mai 2005, 00:30 Uhr

glEvalMesh


Name

glEvalMesh1]], [[glEvalMesh2 - Berechnen ein ein- oder zweidimensionales Punkt- oder Liniengitter.


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: Bestimmt ob ein eindimensionales Netz von Punkten oder Linen erstellt werden soll. 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
Legen den ersten und letzten ganzzahligen Wert für die Raster-Gebiets-Variable (engl.: grid domain variable) i bzw. j fest.


Beschreibung

glMapGrid und glEvalMesh werden gemeinsam genutzt um auf effiziente Art und Weise eine Serie von gleichmäßig verteilten Karten-Gebiets-Werten (engl.: map domain values) zu erstellen und auszuwerten.

glEvalMesh läuft durch den Integer-Bereich eines ein- oder zweidimensionalen Gitters, dessen Ausdehnung das Gebiet der Auswertungskarten ist, die durch glMap1 und glMap2 festgelegt wurden.

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

du=(u2-u1)/n

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