glMap1: Unterschied zwischen den Versionen
Nano63 (Diskussion | Beiträge) () |
Flash (Diskussion | Beiträge) (→Siehe auch) |
||
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | |||
= glMap1 = | = glMap1 = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''glMap1''' definiert einen eindimensionalen Evaluator zur Erstellung von Bézierkurven. | '''glMap1''' definiert einen eindimensionalen Evaluator zur Erstellung von Bézierkurven. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | '''procedure''' glMap1d(''target'': TGLenum; ''u1'': TGLdouble; ''u2'': TGLdouble; ''stride'': TGLint; ''order'': TGLint; | + | '''procedure''' glMap1d(''target'': TGLenum; ''u1'': TGLdouble; ''u2'': TGLdouble; ''stride'': TGLint; ''order'': TGLint; |
− | '''procedure''' glMap1f(''target'': TGLenum; ''u1'': TGLfloat; ''u2'': TGLfloat; ''stride'': TGLint; ''order'': TGLint; | + | '''const''' ''points'': PGLdouble); |
− | + | '''procedure''' glMap1f(''target'': TGLenum; ''u1'': TGLfloat; ''u2'': TGLfloat; ''stride'': TGLint; ''order'': TGLint; | |
− | <br | + | '''const''' ''points'': PGLfloat);<br> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Parameter == | == Parameter == | ||
Zeile 42: | Zeile 18: | ||
{| border="1" rules="all" | {| border="1" rules="all" | ||
! ''target'' | ! ''target'' | ||
− | | Legt fest, | + | | Legt fest, welcher Art die Werte sind die der Evaluator erstellt. Folgende symbolische Konstanten sind erlaubt:<br> '''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'', ''u2'' | ||
− | | ''u1'' und ''u2'' legen den Bereich fest, für den die Kontrollpunkte definiert werden und | + | | ''u1'' und ''u2'' legen den Bereich fest, für den die Kontrollpunkte definiert werden und der beim Auswerten die Variable ''u'' durchlaufen wird. |
|- | |- | ||
! ''stride'' | ! ''stride'' | ||
Zeile 52: | Zeile 28: | ||
|- | |- | ||
! ''order'' | ! ''order'' | ||
− | | Gibt die Anzahl der im Feld ''points'' übergebenen Kontrollpunkte an | + | | Gibt die Anzahl der im Feld ''points'' übergebenen Kontrollpunkte an. Muss eine positive Ganzzahl sein. |
|- | |- | ||
! ''points'' | ! ''points'' | ||
Zeile 58: | Zeile 34: | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Beschreibung == | == 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 zu | + | 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. |
− | [http://de.wikipedia.org/wiki/Splines Splines](Teilbereiche von Polynomen) von | + | Alle polynomialen und rationalen [http://de.wikipedia.org/wiki/Splines 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 [http://de.wikipedia.org/wiki/Bernsteinpolynom Bernsteinpolynom]. | Von Evaluatoren definierte Oberflächen basieren auf bivariaten [http://de.wikipedia.org/wiki/Bernsteinpolynom Bernsteinpolynom]. | ||
Definiere | Definiere | ||
− | [[Bild: | + | [[Bild:GlMap1_EvaluatorDefinition.png]] |
− | [[Bild: | + | [[Bild:GlMap12_BernsteinPolynomU.png]] ist das '''i'''te Bernsteinpolynom vom Grad '''n''' (''order''= '''n'''+1) |
Nocheinmal zur Erinnerung: | Nocheinmal zur Erinnerung: | ||
− | [[Bild: | + | [[Bild:GlMap12_BinomEigenschaften.png]] |
− | '''glMap1''' wird benutzt um die Basis zu definieren und festzulegen, welche Werte erzeugt werden sollen. Einmal definiert, kann eine Map mit [[glEnable|glEnable/glDisable]] und dem Map-Namen (einer der 9 nachfolgend gelisteten Werte) aktiviert und deaktiviert werden. [[glEvalCoord]]1 liefert einen Wert '''u''',das Bernsteinpolynom wird ausgewertet indem u^ verwendet wird, wobei : | + | '''glMap1''' wird benutzt um die Basis zu definieren und um festzulegen, welche Werte erzeugt werden sollen. Einmal definiert, kann eine Map mit [[glEnable|glEnable/glDisable]] und dem Map-Namen (einer der 9 nachfolgend gelisteten Werte) aktiviert und deaktiviert werden. [[glEvalCoord]]1 liefert einen Wert '''u''',das Bernsteinpolynom wird ausgewertet indem u^ verwendet wird, wobei gilt: |
− | [[Bild: | + | [[Bild: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: | ''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: | ||
Zeile 120: | Zeile 85: | ||
: Jeder Kontrollpunkt besteht aus vier Fließkommawerten welche die s,t,r und q-Texturkoordinate darstellen. Intern werden [[glTexCoord]]4 Befehle generiert wenn die Map ausgewertet wird. Die aktuellen Texturcoordinate werden aber nicht mit den generierten Werten überschrieben. | : Jeder Kontrollpunkt besteht aus vier Fließkommawerten welche die s,t,r und q-Texturkoordinate darstellen. Intern werden [[glTexCoord]]4 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 | + | ''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. | * ''points'' ist ein Zeiger auf den ersten Kontrollpunkt im Array, welcher, abhängig vom Typ, eine bis vier aufeinanderfolgende Speichereinheiten belegen kann. | ||
Zeile 129: | Zeile 94: | ||
− | + | ||
+ | |||
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. | 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. | 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. | ||
Zeile 135: | Zeile 101: | ||
Evaluatoren können entweder punktweise mit [[glEvalCoord|glEvalCoord1]] ausgewertet werden, oder mit [[glMapGrid]] zur Erstellung eines gleichmäßigen Gitters verwendet werden, welches schließlich mit [[glEvalMesh]] gerendert werden kann. | Evaluatoren können entweder punktweise mit [[glEvalCoord|glEvalCoord1]] ausgewertet werden, oder mit [[glMapGrid]] zur Erstellung eines gleichmäßigen Gitters verwendet werden, welches schließlich mit [[glEvalMesh]] gerendert werden kann. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Hinweise == | == 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. | 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 == | == Zugehörige Wertrückgaben == | ||
Zeile 179: | Zeile 121: | ||
[[glGetFloatv]] mit Token [[glGet#GL_MAP1_GRID_DOMAIN|GL_MAP1_GRID_DOMAIN]]<br> | [[glGetFloatv]] mit Token [[glGet#GL_MAP1_GRID_DOMAIN|GL_MAP1_GRID_DOMAIN]]<br> | ||
[[glGetFloatv]] mit Token [[glGet#GL_MAP1_GRID_SEGMENTS|GL_MAP1_GRID_SEGMENTS]]<br> | [[glGetFloatv]] mit Token [[glGet#GL_MAP1_GRID_SEGMENTS|GL_MAP1_GRID_SEGMENTS]]<br> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Siehe auch == | == Siehe auch == | ||
[[glMap2]], [[glEvalCoord]], [[glMapGrid]], [[glEvalMesh]] | [[glMap2]], [[glEvalCoord]], [[glMapGrid]], [[glEvalMesh]] | ||
− | + | [[Kategorie:GL|Map1]] | |
− | + | [[Kategorie:GL1.0]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Aktuelle Version vom 16. April 2007, 00:26 Uhr
Inhaltsverzeichnis
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.
ist das ite Bernsteinpolynom vom Grad n (order= n+1)
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:
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