glMap1

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glMap1

Name

glMap1 definiert einen eindimensionalen Evaluator zur Erstellung von Bézierkurven.


Delphi-Spezifikation

procedure glMap1d(target: TGLenum; u1: TGLdouble; u2: TGLdouble; stride: TGLint; order: TGLint; 
                  const points: PGLdouble);
procedure glMap1f(target: TGLenum; u1: TGLfloat; u2: TGLfloat; stride: TGLint; order: TGLint; 
                  const points: PGLfloat);

Parameter

target Legt fest, welcher Art die Werte sind die der Evaluator erstellt. Folgende symbolische Konstanten sind erlaubt:
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, und GL_MAP1_TEXTURE_COORD_4
u1, u2 u1 und u2 legen den Bereich fest, für den die Kontrollpunkte definiert werden und der beim Auswerten die Variable u durchlaufen wird.
stride Gibt an, wie viele single- oder double-Werte zwischen zwei Kontrollpunkten liegen (z.B. 3, wenn in points dreidimensionale Koordinaten gespeichert sind).

Dies erlaubt es, die Kontrollpunkte in beliebige Datenstrukturen einzuschließen. Die einzige Bedingung dafür ist, dass die Werte für einen Kontrollpunkt zusammen, hintereinander im Speicher liegen.

order Gibt die Anzahl der im Feld points übergebenen Kontrollpunkte an. Muss eine positive Ganzzahl sein.
points Pointer auf die erste Koordinate des ersten Kontrollpunkts im Feld.



Beschreibung

1D-Evaluatoren (Bezierkurven) unterstützen einen Weg um mittels polinomialen und rational polinomialen Mapping Vertices, Normalen, Textur-Koordinaten und Farben zu erzeugen. Die von den Evaluatoren stammenden Werte, werden genauso zu weiteren OpenGL Verarbeitungsstufen gesendet, als ob sie von glVertex, glNormal, glTexCoord und glColor Befehlen kommen würden. Der einzigste Unterschied besteht darin das die aktuelle Normale, Texturkoordinate und Farbe nicht verändert wird.

Alle polynomialen und rationalen Splines(Teilbereiche von Polynomen) von beliebigem Grad (bis zum maximalen Grad den die OpenGL Inmplementation unterstützt) können mit Evaluatoren beschrieben werden. Dies beinhaltet fast sämtliche Oberflächentypen die in der Computergrafik verwendet werden, inklusive B-spline Oberflächen, NURBS Oberflächen, Bezier Oberflächen und so weiter.

Von Evaluatoren definierte Oberflächen basieren auf bivariaten Bernsteinpolynom.

Definiere GlMap1 EvaluatorDefinition.png

GlMap12 BernsteinPolynomU.png ist das ite Bernsteinpolynom vom Grad n (order= n+1)

Nocheinmal zur Erinnerung: GlMap12 BinomEigenschaften.png

glMap1 wird benutzt um die Basis zu definieren und um festzulegen, welche Werte erzeugt werden sollen. Einmal definiert, kann eine Map mit glEnable/glDisable und dem Map-Namen (einer der 9 nachfolgend gelisteten Werte) aktiviert und deaktiviert werden. glEvalCoord1 liefert einen Wert u,das Bernsteinpolynom wird ausgewertet indem u^ verwendet wird, wobei gilt:

GlMap12 u.png

target ist eine symbolische Konstante die anzeigt, welcher Typ für die Kontrollpunkte in Points verwendet wird und welche Ausgabe generiert wird, wenn die Karte/Map ausgewertet wird. target kann einen der nachfolgenden Werte annehmen:

GL_MAP1_VERTEX_3

Jeder Kontrollpunkt besteht aus drei Fließkommawerten welche die x,y und z-Komponente darstellen. Intern werden glVertex3x Befehle generiert wenn die Map ausgewertet wird.

GL_MAP1_VERTEX_4

Jeder Kontrollpunkt besteht aus vier Fließkommawerten welche die x,y,z und w-Komponente darstellen. Intern werden glVertex4x Befehle generiert wenn die Map ausgewertet wird.

GL_MAP1_INDEX

Jeder Kontrollpunkt ist ein einzelner Fließkommawert welcher einen Farbindex darstellt. Intern werden glIndex Befehle generiert wenn die Map ausgewertet wird. Der aktuelle Index wird aber nicht mit den generierten Werten überschrieben.

GL_MAP1_COLOR_4

Jeder Kontrollpunkt besteht aus vier Fließkommawerten welche die r,g,b und a-Farbkomponenten darstellen. Intern werden glColor4x Befehle generiert wenn die Map ausgewertet wird. Die aktuelle Farbe wird aber nicht mit der generierten Farbe überschrieben.

GL_MAP1_NORMAL

Jeder Kontrollpunkt besteht aus drei Fließkommawerten welche die x,y und z-Komponente darstellen. Intern werden glNormal Befehle generiert wenn die Map ausgewertet wird. Die aktuelle Normale wird aber nicht mit den generierten Normalen überschrieben.

GL_MAP1_TEXTURE_COORD_1

Jeder Kontrollpunkt ist ein einzelner Fließkommawert welcher die s-Texturkoordinate darstellt. Intern werden glTexCoord1 Befehle generiert wenn die Map ausgewertet wird. Die aktuelle Texturcoordinate wird aber nicht mit den generierten Werten überschrieben.

GL_MAP1_TEXTURE_COORD_2

Jeder Kontrollpunkt besteht aus zwei Fließkommawerten welche die s und t-Texturkoordinate darstellen. Intern werden glTexCoord2 Befehle generiert wenn die Map ausgewertet wird. Die aktuellen Texturcoordinate werden aber nicht mit den generierten Werten überschrieben.

GL_MAP1_TEXTURE_COORD_3

Jeder Kontrollpunkt besteht aus drei Fließkommawerten welche die s,t und r-Texturkoordinate darstellen. Intern werden glTexCoord3 Befehle generiert wenn die Map ausgewertet wird. Die aktuellen Texturcoordinate werden aber nicht mit den generierten Werten überschrieben.

GL_MAP1_TEXTURE_COORD_4

Jeder Kontrollpunkt besteht aus vier Fließkommawerten welche die s,t,r und q-Texturkoordinate darstellen. Intern werden glTexCoord4 Befehle generiert wenn die Map ausgewertet wird. Die aktuellen Texturcoordinate werden aber nicht mit den generierten Werten überschrieben.

ustride, uorder und points werden benutzt um auf das Array mit den Kontrollpunkten zugreifen zu können.

  • points ist ein Zeiger auf den ersten Kontrollpunkt im Array, welcher, abhängig vom Typ, eine bis vier aufeinanderfolgende Speichereinheiten belegen kann.
  • uorder legt die Anzahl der Kontrollpunkte im Array fest.
  • ustride bestimmt wieviele float oder double Werte zwischen den Kontrollpunkten übersprungen werden müssen um zum nachfolgenden Kontrollpunkt zu kommen.



Für die Auswertung können mehrere Evaluatoren gleichzeitig verwendet werden. Sind zum Beispiel sowohl ein GL_MAP1_VERTEX_3 und ein GL_MAP1_COLOR_4 Evaluator definiert und aktiviert, werden bei der Auswertung Vertexdaten mit entsprechenden Farbwerten erzeugt. Während jeweils nur ein Vertex-Evaluator und nur ein Textur-Evaluator aktiv sein können, ist ansonsten jede beliebige Kombination von Vertex-, Normalen-, Farb- und Texturwerten möglich. Wenn mehr als ein Evaluator desselben Typs definiert und aktiviert ist, wird jeweils der mit der höchsten Dimension genutzt (z.B. GL_MAP1_VERTEX_4 statt GL_MAP1_VERTEX_3).

Evaluatoren können entweder punktweise mit glEvalCoord1 ausgewertet werden, oder mit glMapGrid zur Erstellung eines gleichmäßigen Gitters verwendet werden, welches schließlich mit glEvalMesh gerendert werden kann.

Hinweise

Wie bei allen GL Befehlen die Zeiger benutzen, verhält sich das Array points so, als ob der Inhalt des Arrays durch Map1 kopiert worden wäre bevor Map1 beendet wurde. Änderungen am Inhalt von points haben damit keinen Effekt nachdem glMap1 ausgeführt wurde.

Zugehörige Wertrückgaben

glGetMap mit Token GL_ORDER
glGetMap mit Token GL_COEFF
glGetMap mit Token GL_DOMAIN
glIsEnabled mit Token GL_MAP1_VERTEX_3
glIsEnabled mit Token GL_MAP1_VERTEX_4
glIsEnabled mit Token GL_MAP1_INDEX
glIsEnabled mit Token GL_MAP1_COLOR_4
glIsEnabled mit Token GL_MAP1_NORMAL
glIsEnabled mit Token GL_MAP1_TEXTURE_COORD_1
glIsEnabled mit Token GL_MAP1_TEXTURE_COORD_2
glIsEnabled mit Token GL_MAP1_TEXTURE_COORD_3
glIsEnabled mit Token GL_MAP1_TEXTURE_COORD_4
glIsEnabled mit Token GL_AUTO_NORMAL
glGetFloatv mit Token GL_MAP1_GRID_DOMAIN
glGetFloatv mit Token GL_MAP1_GRID_SEGMENTS



Siehe auch

glMap2, glEvalCoord, glMapGrid, glEvalMesh