glTexImage: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Parameter: Beschreibung von 'pixels')
Zeile 1: Zeile 1:
 +
{{Offline}}
 +
 
= glTexImage =
 
= glTexImage =
  

Version vom 26. April 2009, 14:05 Uhr

Hinweis: Dieser Artikel wird gerade Offline bearbeitet!

Bitte haben Sie etwas Geduld und nehmen Sie keine Änderungen vor, bis der Artikel hochgeladen wurde.

(weitere Artikel)
WIP Offline.jpg

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, in dem 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