glTexImage: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (→Beschreibung) |
K (→Hinweise) |
||
Zeile 128: | Zeile 128: | ||
Texturierung hat im Farbindexmodus keinen Effekt. | 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 | + | 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. | 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 == | == Änderungen == |
Version vom 7. März 2008, 22:15 Uhr
Inhaltsverzeichnis
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);
procedure glTexImage2D(target: TGLenum; level: TGLint; internalformat: TGLint; width: TGLsizei; height: TGLsizei; border: TGLint; format: TGLenum; _type: TGLenum; const pixels: PGLvoid);
procedure glTexImage3D(target: TGLenum; level: TGLint; internalformat: TGLint; width: TGLsizei; height: TGLsizei; depth: TGLsizei; border: TGLint; format: TGLenum; _type: TGLenum; const pixels: PGLvoid);
Parameter
target | Gibt an, welche Texture erreicht werden soll. Muss je nach Funktionsaufruf GL_TEXTURE_1D,GL_TEXTURE_2D oder GL_TEXTURE_3D sein. |
level | Gibt den Detailgrad für das gewünschte Bild an. level 0 ist das Basisbild. Level n ist die n-te Mipmap reduzierung des Bildes. |
internalformat | 1 für R 2 für R und A 3 für RGB 4 für RGBA |
width, | Breite = Anzahl der Pixel pro Zeile muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben. |
height, | Höhe = Anzahl der Zeilen muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben |
depth, | Tiefe = Anzahl der "Scheiben" muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben |
border, | Breite des Rahmens || 0 oder 1 |
format | Bestimmt das Format der Pixeldaten. Folgende symbolische Werte werden akzeptiert: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, und GL_LUMINANCE_ALPHA |
_type | Bestimmt den Pixeltyp für den Inhalt von pixels. Folgende Typen werden unterstützt: GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT, GL_BITMAP |
pixels | Die Texture-Image Daten vom Typ, der in format angegeben wurde ( Array wo die Pixel gespeichert sind ) |
Beschreibung
Texturierung bildet einen bestimmten Teil eines Texturbildes auf alle 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.
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.
Ein Texturbild welches nur eine Komponente besitzt, beenutzt nur die Rotwerte der aus pixels extrahierten RGBA Farbe.
Ein Texturbild mit zwei Komponenten benutzt nur die Rot und Alpha Komponenten.
Ein Texturbild mit drei Komponenten benutzt nur die Rot, Grün und Blau Komponenten.
Ein Texturbild mit vier Komponenten benutzt alle RGBA Farbkomponenten.
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 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)
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
GL_INVALID_ENUM wird generiert wenn type keine gültige Typkonstante übergeben wurde.
GL_INVALID_ENUM wird generiert wenn GL_BITMAP als type und GL_COLOR_INDEX nicht(!) als format angegeben wurde.
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).
GL_INVALID_VALUE wird generiert wenn für internalformat etwas anderes als 1, 2, 3 oder 4 angegeben wurde.
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.
GL_INVALID_VALUE wenn border nicht 0 oder 1 ist.
GL_INVALID_OPERATION wird generiert wenn eine glTexImage-Funktion in einem glBegin- und glEnd-Block aufgerufen wird.
Zugehörige Wertrückgaben
glGetTexImage
glIsEnabled mit dem Token GL_TEXTURE_1D, GL_TEXTURE_2D bzw. GL_TEXTURE_2D.
Siehe auch
glTexEnv, glTexGen, glTexSubImage1D, glTexSubImage2D, glTexSubImage3D, glTexParameter, glTexCoord