glTexImage: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: '{{Hinweis|Dieser Artikel wurde wieder in glTexImage1D, glTexImage2D und glTexImage3D aufgeteilt.}}')
 
Zeile 1: Zeile 1:
{{Offline}}
+
{{Hinweis|Dieser Artikel wurde wieder in [[glTexImage1D]], [[glTexImage2D]] und [[glTexImage3D]] aufgeteilt.}}
 
 
= glTexImage =
 
 
 
 
 
 
 
== Name ==
 
'''glTexImage''' - Einstellungen zum Texturen zeichnen
 
 
 
 
 
 
 
== Spezifikation ==
 
procedure '''glTexImage1D'''(''target'': TGLenum; ''level'': TGLint; ''internalformat'': TGLint; ''width'': TGLsizei;
 
                        ''border'': TGLint; ''format'': TGLenum; ''_type'': TGLenum; '''const''' ''pixels'': PGLvoid); <br>
 
procedure '''glTexImage2D'''(''target'': TGLenum; ''level'': TGLint; ''internalformat'': TGLint; ''width'': TGLsizei;
 
                        ''height'': TGLsizei; ''border'': TGLint; ''format'': TGLenum; ''_type'': TGLenum;
 
                        '''const''' ''pixels'': PGLvoid); <br>
 
procedure '''glTexImage3D'''(''target'': TGLenum; ''level'': TGLint; ''internalformat'': TGLint; ''width'': TGLsizei;
 
                        ''height'': TGLsizei; ''depth'': TGLsizei; ''border'': TGLint; ''format'': TGLenum;
 
                        ''_type'': TGLenum; '''const''' ''pixels'': PGLvoid); <br>
 
 
 
== Parameter ==
 
<table border=1 rules=all>
 
<tr>
 
<td>''target''</td>
 
<td>Gibt an, welche Texture erreicht werden soll.  Muss je nach Funktionsaufruf '''GL_TEXTURE_1D,GL_TEXTURE_2D''' oder '''GL_TEXTURE_3D''' sein.</td>
 
</tr>
 
<tr>
 
<td>''level''</td>
 
<td>Gibt den Detailgrad für das gewünschte Bild an. <br>
 
''level'' '''0''' ist das Basisbild. Level n ist die n-te Mipmap reduzierung des Bildes.</td>
 
</tr>
 
<tr>
 
<td>''internalformat''</td>
 
<td>'''1''' für '''R''' <br> '''2''' für '''R''' und '''A''' <br> '''3''' für '''RGB''' <br> '''4''' für '''RGBA'''</td>
 
</tr>
 
<tr>
 
<td>''width'',</td>
 
<td>Breite = Anzahl der Pixel pro Zeile <br> muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben.</td>
 
</tr>
 
<tr>
 
<td>''height'',</td>
 
<td>Höhe = Anzahl der Zeilen <br> muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben</td>
 
</tr>
 
<tr>
 
<td>''depth'',</td>
 
<td>Tiefe = Anzahl der "Scheiben" <br> muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben</td>
 
</tr>
 
<tr>
 
<td>''border'',</td>
 
<td>Breite des Rahmens || '''0''' oder '''1'''</td>
 
</tr>
 
<tr>
 
<td>''format''</td>
 
<td>Bestimmt das Format der Pixeldaten. Folgende symbolische Werte werden akzeptiert: <br>
 
'''GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE,''' und '''GL_LUMINANCE_ALPHA'''</td>
 
</tr>
 
<tr>
 
<td>''_type''</td>
 
<td>Bestimmt den Pixeltyp für den Inhalt von ''pixels''. Folgende Typen werden unterstützt:<br>
 
'''GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT, GL_BITMAP'''</td>
 
</tr>
 
<tr>
 
<td>''pixels''</td>
 
<td>Die Texture-Image Daten vom Typ, der in ''format'' angegeben wurde (Array, in dem die Pixel gespeichert sind) </td>
 
</tr>
 
</table>
 
 
 
== Beschreibung ==
 
Texturierung bildet einen bestimmten Teil eines Texturbildes auf alle [[Primitive|Grafikprimitiven]] ab für die Texturierung aktiviert ist.
 
 
 
Je nachdem welche Texturart aktiviert werden soll ruft man [[glEnable]] mit den Parametern '''GL_TEXTURE_1D, GL_TEXTURE_2D''' oder '''GL_TEXTURE_3D''' auf. Die Deaktivierung erfolgt entsprechend mittels [[glDisable]].
 
 
 
Die Texturbilder werden durch die Funktionen '''glTexImage1D, glTexImage2D''' bzw. '''glTexImage3D''' definiert. Die Argumente der Funktionen beschreiben die Eigenschaften des Texturbildes wie z.B. Breite, Höhe, Tiefe (je nach Dimension), Breite des Randes, [[LOD]]-Nummer (siehe [[glTexParameter]]) und Anzahl der unterstützen Farbkomponenten. Die letzten 3 Argumente beschreiben wie das Bild im Speicher abgelegt wird. Die 3 Argumente sind identisch mit denen, die das Pixelformat bei [[glDrawPixels]] steuern.
 
 
 
Die Daten werden aus ''pixels'' als Sequenz von vorzeichenlosen oder -behafteten Byte-, Shortint- oder Longint-Werten oder als Fließkommazahlen einfacher Genauigkeit gelesen. Der Typ wird über ''type'' festgelegt. <br>
 
Die ausgelesen Werte werden abhängig von ''format'' gruppiert zu Gruppen mit je einem, zwei, drei oder vier Werten. Diese Gruppen entsprechen einem Element.
 
 
 
Wenn ''type'' gleich '''GL_BITMAP''' ist, werden die Daten als Folge (orig.: "String") von vorzeichenlosen Bytewerten angesehen (wobei ''format'' '''GL_COLOR_INDEX''' sein muss). Jedes Byte des Datenblocks wird als Gruppe von 8 1-Bit Elementen interpretiert. Die Reihenfolge der Bits wird durch '''GL_UNPACK_LSB_FIRST''' (siehe [[glPixelStore]]) festgelegt.
 
 
 
 
 
Der ''format'' Parameter bestimmt die Zusammenstellung der Elemente aus ''pixels''. Folgende 9 möglichen Werte kann ''format'' haben:
 
 
 
 
 
'''GL_COLOR_INDEX'''
 
:Jedes Element entspricht einem einzelnen Wert, dem Farbindex. Jeder Index wird in eine Festkommazahl (mit einer unbestimmten Anzahl 0 Bits rechts vom Komma) konvertiert, abhängig von Wert und Vorzeichen von '''GL_INDEX_SHIFT''' bitweise nach rechts bzw. links verschoben und zu GL_INDEX_OFFSET addiert. Dann werden die Indizes durch ihre entsprechenden Werte aus den Tabellen '''GL_PIXEL_MAP_I_TO_R''', '''GL_PIXEL_MAP_I_TO_G''', '''GL_PIXEL_MAP_I_TO_B''' und '''GL_PIXEL_MAP_I_TO_A''' ersetzt und auf das Interval [0, 1] heruntergerechnet.
 
 
 
'''GL_RED'''
 
:Jedes Element entspricht einer roten Farbkomponente. Der Wert wird in eine Fließkommazahl konvertiert und zu einem RGBA Wert ergänzt, indem man 0.0 für die beiden anderen Farben und 1.0 für den Alphakanal hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_GREEN'''
 
:Jedes Element entspricht einer grünen Farbkomponente. Der Wert wird in eine Fließkommazahl konvertiert und zu einem RGBA Wert ergänzt, indem man 0.0 für die beiden anderen Farben und 1.0 für den Alphakanal hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_BLUE'''
 
:Jedes Element entspricht einer blauen Farbkomponente. Der Wert wird in eine Fließkommazahl konvertiert und zu einem RGBA Wert ergänzt, indem man 0.0 für die beiden anderen Farben und 1.0 für den Alphakanal hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_ALPHA'''
 
:Jedes Element entspricht einer Alpha-Farbkomponente. Der Wert wird in eine Fließkommazahl konvertiert und zu einem RGBA Wert ergänzt, indem man 0.0 für die drei anderen Farben hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_RGB'''
 
:Jedes Element entspricht den drei RGB-Farbwerten. Die Werte werden in Fließkommazahlen konvertiert und zu einem RGBA Wert ergänzt, indem man 1.0 für den Alphakanal hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_RGBA'''
 
:Jedes Element enthält alle vier Farbkomponenten. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_LUMINANCE'''
 
:Jedes Element entspricht einem Helligkeitswert. Der Wert wird in Fließkommazahlen konvertiert und zu einem RGBA Wert ergänzt, indem man den Helligkeitswert drei mal für R, G und B einsetzt und 1.0 für den Alphakanal hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
'''GL_LUMINANCE_ALPHA'''
 
:Jedes Element entspricht einem Paar aus Helligkeitswert und Alphawert. Beide Werte werden in Fließkommazahlen konvertiert und zu einem RGBA Wert ergänzt, indem man den Helligkeitswert drei mal für R, G und B einsetzt und den Alphawert hinzufügt. Jede Komponente wird mit '''GL_'''''c'''''_SCALE''' multipliziert und zu '''GL_'''''c'''''_BIAS''' addiert, und am Schluss auf den Bereich [0,1] begrenzt, wobei ''c'' durch R, G, B oder A ersetzt werden soll. (siehe [[glPixelTransfer]])
 
 
 
 
 
Lesen Sie den Artikel [[glDrawPixels]] um eine Beschreibung der zulässigen Werte für ''type'' zu erhalten.
 
 
 
Ein Texturbild kann bis zu 4 Farbkomponenten pro Texturelement ([[Texel]]) besitzen. Dies wird über den Parameter ''internalformat'' geregelt. <br>
 
Ein Texturbild welches nur eine Komponente besitzt, beenutzt nur die Rotwerte der aus ''pixels'' extrahierten RGBA Farbe. <br>
 
Ein Texturbild mit zwei Komponenten benutzt nur die Rot und Alpha Komponenten. <br>
 
Ein Texturbild mit drei Komponenten benutzt nur die Rot, Grün und Blau Komponenten. <br>
 
Ein Texturbild mit vier Komponenten benutzt alle RGBA Farbkomponenten. <br>
 
 
 
===Verwendungsmöglichkeit===
 
Abseits dem einfachen Laden von Texturen wird diese Funktion auch benutzt um Speicherbereiche für die spätere Verwendung zu reservieren. Ruft man glTexImage mit ''pixels'' = '''nil''' auf, wird der Speicherbereich zwar angelegt aber nicht gefüllt. Dies kann zum Beispiel gewünscht sein, wenn man einen Screenshot als Textur verwenden möchte ("Render To Texture"). Man kann dann den [[Framebuffer]] (=Screenshot) mittels [[glCopyTexImage]] in den durch glTexImage reservierten Speicherbereich kopieren. (Siehe dazu auch diesen [http://www.delphigl.com/forum/viewtopic.php?p=59156 Thread im Forum])
 
 
 
== Hinweise ==
 
'''glTexImage3D''' war bis zu OpenGL 1.2 nur eine Erweiterung. Deswegen ist bei manchen Chipsätzen die Funktion nur als '''glTexImage3DEXT''' verfügbar.
 
 
 
Texturierung hat im Farbindexmodus keinen Effekt.
 
 
 
Das Texturbild kann in den selben Datenformaten vorliegen wie die Pixel bei [[glDrawPixels]] ausgenommen '''GL_STENCIL_INDEX''' und '''GL_DEPTH_COMPONENT'''. [[glPixelStore]] und [[glPixelTransfer]] beeinflussen das Texturebild in exakt der Art und Weise, wie sie auch [[glDrawPixels]] beeinflussen.
 
 
 
Eine Textur die 0 Pixel hoch oder breit ist, stellt die NULL-Textur dar. Wenn die NULL-Textur für die LOD-Stufe 0 spezifiziert wird entspricht das Verhalten dem bei deaktivierter Texturierung.
 
 
 
== Änderungen ==
 
Folgende Erweiterungen hat die Funktion erfahren:
 
 
 
=== Ab OpenGL Version 1.3 ===
 
[[GL_ARB_texture_cube_map]] definiert weitere 6 2D-Texture-Typen welche als ''target'' angegeben werden können.
 
 
 
 
 
 
 
 
 
 
 
== Fehlermeldungen ==
 
 
 
'''GL_INVALID_ENUM''' wird generiert wenn ''target'' nicht '''GL_TEXTURE_1D, GL_TEXTURE_2D''' oder '''GL_TEXTURE_3D''' ist. (entsprechend der benutzten Funktion)<br>
 
 
 
'''GL_INVALID_ENUM''' wird generiert wenn ''format'' ungültige Werte übergeben wurden. Akzeptiert werden alle Formatangaben außer '''GL_STENCIL_INDEX''' und '''GL_DEPTH_COMPONENT''' <br>
 
 
 
'''GL_INVALID_ENUM''' wird generiert wenn ''type'' keine gültige Typkonstante übergeben wurde. <br>
 
 
 
'''GL_INVALID_ENUM''' wird generiert wenn GL_BITMAP als ''type'' und '''GL_COLOR_INDEX nicht(!)''' als ''format'' angegeben wurde. <br>
 
 
 
'''GL_INVALID_VALUE''' wird generiert wenn ''level'' kleiner 0 oder größer ld(max) ist, wobei max der Rückgabewert von '''GL_MAX_TEXTURE_SIZE''' ist. (ld = Logarithmus Dualis = Basis 2). <br>
 
 
 
'''GL_INVALID_VALUE''' wird generiert wenn für ''internalformat'' etwas anderes als ''1'', ''2'', ''3'' oder ''4'' angegeben wurde. <br>
 
 
 
'''GL_INVALID_VALUE''' wird generiert wenn ''width'', ''height'' bzw. ''depth'' (je nach Funktion) kleiner als 0 oder größer als 2 + '''GL_MAX_TEXTURE_SIZE''' ist, oder die Bedingung  2^k + 2 * (border) (k=Integerwerte) nich erfüllt. <br>
 
 
 
'''GL_INVALID_VALUE''' wenn ''border'' nicht ''0'' oder ''1'' ist. <br>
 
 
 
'''GL_INVALID_OPERATION''' wird generiert wenn eine '''glTexImage'''-Funktion in einem [[glBegin]]- und [[glEnd]]-Block aufgerufen wird. <br>
 
 
 
== Zugehörige Wertrückgaben ==
 
[[glGetTexImage]] <br>
 
[[glIsEnabled]] mit dem Token '''GL_TEXTURE_1D''', '''GL_TEXTURE_2D''' bzw. '''GL_TEXTURE_2D'''.
 
 
 
 
 
 
 
 
 
== Siehe auch ==
 
[[glTexEnv]], [[glTexGen]], [[glTexSubImage1D]], [[glTexSubImage2D]], [[glTexSubImage3D]], [[glTexParameter]], [[glTexCoord]]
 
 
 
[[Kategorie:GL|TexImage]]
 
[[Kategorie:GL1.0]]
 

Aktuelle Version vom 29. April 2009, 11:14 Uhr

Info DGL.png Dieser Artikel wurde wieder in glTexImage1D, glTexImage2D und glTexImage3D aufgeteilt.