gl.EvalMesh(mode, i1, i2[, j1, j2])
gl.MapGrid() und gl.EvalMesh()
werden parallel verwendet,
um eine Reihe von gleichmäßig verteilten Kartendomänenwerten effizient zu
erzeugen und auszuwerten. gl.EvalMesh()
durchläuft die ganzzahligen Domänen
eines ein- oder zweidimensionalen Gittters, dessen Bereich der Domäne der
durch gl.Map() angegebene Karten ist. mode
bestimmt, ob die resultierenden Knoten als Punkte, Linien oder gefüllte
Polygone verbunden werden (letzteres wird nur für zweidimensionale Gitter
unterstützt). Im eindimensionalen Fall wird gl.EvalMesh()
das Gitter so
erzeugen, als ob der folgende Fragment-Code ausgeführt wurde:
gl.Begin(type) For Local i = i1 To i2 Do gl.EvalCoord(i*du+u1) gl.End() |
wobei du = (u2-u1)/n und n, u1 und u2 die Argumente für den letzten
gl.MapGrid() Befehl sind. type
ist #GL_POINTS
,
wenn der Mode #GL_POINT
ist oder #GL_LINES
, wenn der Mode #GL_LINE
ist. Die einzige absolute numerische Anforderung ist, dass wenn i = n,
der aus i*du+u1 berechnete Wert genau u2 ist.
Im zweidimensionalen Fall, gl.EvalMesh()
, führen Sie
du = (u2-u1)/n dv = (v2-v1)/m, |
aus, wobei n, u1, u2, m, v1 und v2 die Argumente für den letzten gl.MapGrid()
Befehl sind. Wenn der Mode dann #GL_FILL
ist, ist der Befehl gl.EvalMesh()
äquivalent zu:
For Local j = j1 To j2 - 1 gl.Begin(#GL_QUAD_STRIP) For Local i = i1 To i2 gl.EvalCoord(i*du+u1, j*dv+v1) gl.EvalCoord(i*du+u1, (j+1)*dv+v1) Next gl.End() Next |
Wenn der Mode #GL_LINE
ist, dann ist ein Aufruf von gl.EvalMesh()
äquivalent zu:
For Local j = j1 To j2 gl.Begin(#GL_LINE_STRIP) For Local i = i1 To i2 gl.EvalCoord(i*du+u1, j*dv+v1) Next gl.End() Next For Local i = i1 To i2 gl.Begin(#GL_LINE_STRIP) For Local j = j1 To j2 gl.EvalCoord(i*du+u1, j*dv+v1) Next gl.End() Next |
Und schließlich, wenn der Mode #GL_POINT
ist, dann ist ein Aufruf von
gl.EvalMesh()
äquivalent zu:
gl.Begin(#GL_POINTS) For Local j = j1 To j2 For Local i = i1 To i2 gl.EvalCoord(i*du+u1, j*dv+v1) Next Next gl.End() |
In allen drei Fällen sind die einzigen absoluten numerischen Anforderungen, dass wenn i = n, dann der aus i*du+u1 berechnete Wert genau u2 ist, und wenn j = m, dann ist der aus j*dv+v1 berechnete Wert genau v2.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
#GL_POINT
, #GL_LINE
und bei
einem zweidimensionalen Gitter wird #GL_FILL
akzeptiert.#GL_INVALID_ENUM
wird generiert, wenn mode
kein akzeptierter Wert ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.EvalMesh()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
#GL_MAP1_GRID_DOMAIN
gl.Get() mit dem Argument #GL_MAP2_GRID_DOMAIN
gl.Get() mit dem Argument #GL_MAP1_GRID_SEGMENTS
gl.Get() mit dem Argument #GL_MAP2_GRID_SEGMENTS