Bezeichnung
gl.TexImage2D -- gibt ein zweidimensionales Texturbild an
Übersicht
gl.TexImage2D(level, internalformat, w, h, border, format, type, pixels)
Beschreibung
Texturierungskarte bildet einen Teil eines bestimmten Texturbildes auf jedes grafische Grundmuster ab, für das die Texturierung aktiviert ist. Um die zweidimensionale Texturierung zu aktivieren und zu deaktivieren, rufen Sie gl.Enable() und gl.Disable() mit dem Argument #GL_TEXTURE_2D auf.

Um Texturbilder zu definieren, rufen Sie gl.TexImage2D() auf. Die Argumente beschreiben die Parameter des Texturbildes, wie Höhe, Breite, Breite des Rahmens, Detaillierungsstufe (siehe gl.TexParameter()) und Anzahl der bereitgestellten Farbkomponenten. Die letzten drei Argumente beschreiben, wie das Bild im Speicher dargestellt wird; sie sind identisch mit den für glDrawPixels verwendeten Pixelformaten.

Daten werden von pixels als eine Folge von vorzeichenbehafteten oder vorzeichenlose Bytes, Shorts oder Longs oder einfach präzisen Gleitkommawerten gelesen, abhängig vom type, der #GL_UNSIGNED_BYTE, #GL_BYTE, #GL_BYTE, #GL_BITMAP, #GL_UNSIGNED_SHORT, #GL_SHORT, #GL_UNSIGNED_INT, #GL_INT, #GL_INT und #GL_FLOAT sein kann. Diese Werte werden je nach format in Gruppen von einem, zwei, drei oder vier Werten zu Elementen zusammengefasst. Wenn der Typ #GL_BITMAP ist, werden die Daten als eine Zeichenkette von unsignierten Bytes betrachtet (format muss #GL_COLOR_INDEX sein). Jedes Datenbyte wird als acht 1-Bit-Elemente behandelt, wobei die Bitreihenfolge durch #GL_UNPACK_LSB_FIRST festgelegt wird. Siehe gl.PixelStore für Details.

Das erste Element entspricht der linken unteren Ecke des Texturbildes. Nachfolgende Elemente gehen von links nach rechts durch die restlichen Texel in der untersten Zeile des Texturbildes und dann in den nacheinander höheren Zeilen des Texturbildes. Das letzte Element entspricht der oberen rechten Ecke des Texturbildes.

format bestimmt die Zusammensetzung jedes Elements in Pixeln. Es kann einen von neun symbolischen Werten annehmen:

#GL_COLOR_INDEX
Jedes Element ist ein Einzelwert, ein Farbindex. GL wandelt ihn in einen Festpunkt um (mit einer unbestimmten Anzahl von Nullbits rechts vom Binärpunkt), verschiebt ihn je nach Wert und Vorzeichen von #GL_INDEX_SHIFT nach links oder rechts und ergänzt ihn zu #GL_INDEX_OFFSET. Siehe gl.PixelTransfer für Details. Der resultierende Index wird mit Hilfe der 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 in eine Reihe von Farbkomponenten umgewandelt und in den Bereich [0,1] festgelegt.

#GL_RED
Jedes Element ist eine einzelne rote Komponente. GL wandelt es in Gleitkomma um und fügt es zu einem RGBA-Element zusammen, indem er 0 für Grün sowie Blau und 1 für Alpha anfügt. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_GREEN
Jedes Element ist eine einzelne grüne Komponente. GL wandelt es in Gleitkomma um und fügt es zu einem RGBA-Element zusammen, indem er 0 für Rot sowie Blau und 1 für Alpha anfügt. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_BLUE
Jedes Element ist eine einzelne blaue Komponente. GL wandelt es in Fließkomma um und fügt es zu einem RGBA-Element zusammen, indem er 0 für Rot sowie Grün und 1 für Alpha anfügt. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_ALPHA
Jedes Element ist eine einzelne Alpha-Komponente. GL wandelt es in Gleitkomma um und fügt es zu einem RGBA-Element zusammen, indem er 0 für Rot, Grün und Blau anfügt. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_RGB
Jedes Element ist ein dreifaches RGB. GL wandelt es in Gleitkomma um und fügt es zu einem RGBA-Element zusammen, indem er 1 für Alpha anfügt. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_RGBA
Jedes Element enthält alle vier Komponenten. Jede Komponente wird mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_LUMINANCE
Jedes Element ist ein einzelner Leuchtdichtewert. GL wandelt es in Fließkomma um und fügt es dann zu einem RGBA-Element zusammen, indem er den Leuchtdichtewert dreimal für Rot, Grün und Blau repliziert und 1 für Alpha anfügt. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_LUMINANCE_ALPHA
Jedes Element ist ein Leuchtdichte/Alpha-Paar. GL wandelt es in Fließkomma um und fügt es dann zu einem RGBA-Element zusammen, indem er den Leuchtdichtewert dreimal für Rot, Grün und Blau repliziert. Jede Komponente wird dann mit dem vorzeichenbehafteten Skalenfaktor #GL_c_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_c_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

#GL_DEPTH_COMPONENT
Jedes Element ist eine einzelne Tiefenkomponente. Es wird in Gleitkomma umgewandelt, dann mit dem vorzeichenbehafteten Skalierungsfaktor #GL_DEPTH_SCALE multipliziert, zur vorzeichenbehafteten Ausrichtung #GL_DEPTH_BIAS addiert und in den Bereich [0, 1] festgelegt. Siehe gl.PixelTransfer für Details.

Wenn eine Anwendung die Textur in einer bestimmten Auflösung oder in einem bestimmten Format speichern möchte, kann sie die Auflösung und das Format mit internalformat anfordern. internalformat gibt das interne Format des Textur-Feldes an. Siehe Interne Pixelformate für Details. GL wird eine interne Darstellung wählen, die der vom internalformat geforderten genau entspricht, aber möglicherweise nicht genau übereinstimmt. (Die durch #GL_LUMINANCE, #GL_LUMINANCE_ALPHA, #GL_RGB und #GL_RGBA angegebenen Darstellungen müssen genau übereinstimmen. Die Zahlenwerte 1, 2, 3, und 4 können auch verwendet werden, um die obigen Darstellungen anzugeben.)

Ein Einkomponenten-Texturbild verwendet nur die Rotkomponente der aus Pixeln extrahierten RGBA-Farbe, ein Zweikomponentenbild das R und die A Werte, ein Dreikomponentenbild die Werte R, G und B und ein Vierkomponentenbild verwendet alle RGBA-Komponenten.

Die Texturierung hat im Farbindexmodus keine Wirkung.

Das Texturbild kann durch die gleichen Datenformate dargestellt werden wie die Pixel in einem gl.DrawPixels(), nur dass #GL_STENCIL_INDEX und #GL_DEPTH_COMPONENT nicht verwendet werden können. gl.PixelStore() und gl.PixelTransfer() Modi beeinflussen Texturbilder genau so, wie sie gl.DrawPixels() beeinflussen.

Bitte beachten Sie, dass dieser Befehl direkt mit Speicherzeigern arbeitet. Es gibt auch eine Version, die mit Tabellen anstelle von Speicherzeigern arbeitet, aber das ist natürlich langsamer. Siehe gl.TexImage für Details. Siehe Mit Zeigern arbeiten für Details zur Verwendung von Speicherzeigern mit Hollywood.

Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.

Eingaben
level
gibt die Detailstufenzahl an; Level 0 ist die Basis-Bildebene, Level n ist das n-te Mipmap-Reduktionsbild
internalformat
gibt die Anzahl der Farbkomponenten in der Textur an; muss 1, 2, 3 oder 4 oder eine symbolische Konstante sein (siehe oben)
w
gibt die Breite des Texturbildes an; muss 2^n + 2*border für eine ganze Zahl n sein; alle Implementierungen unterstützen Texturbilder, die mindestens 64 Texel breit sind
h
gibt die Höhe des Texturbildes an; muss 2^m + 2*border für eine ganze Zahl m sein; alle Implementierungen unterstützen Texturbilder, die mindestens 64 Texel hoch sind
border
gibt die Breite des Rahmens an; muss entweder 0 oder 1 sein
format
gibt das Format der Pixeldaten an (siehe oben)
type
gibt den Datentyp der Pixeldaten an (siehe oben)
pixels
gibt einen Zeiger auf die Bilddaten im Speicher an
Fehler
#GL_INVALID_ENUM wird erzeugt, wenn format keine akzeptierte Formatkonstante ist. Andere Formatkonstanten als #GL_STENCIL_INDEX werden akzeptiert.

#GL_INVALID_ENUM wird erzeugt, wenn type keine Typkonstante ist.

#GL_INVALID_ENUM wird erzeugt, wenn type #GL_BITMAP ist und format nicht #GL_COLOR_INDEX ist.

#GL_INVALID_VALUE wird erzeugt, wenn level kleiner als 0 ist.

#GL_INVALID_VALUE wird erzeugt, wenn level größer als log2max ist, wobei max der zurückgegebene Wert von #GL_MAX_TEXTURE_SIZE ist.

#GL_INVALID_VALUE wird erzeugt, wenn internalformat nicht 1, 2, 3, 4 oder eine der akzeptierten symbolischen Auflösungs- und Formatkonstanten ist.

#GL_INVALID_VALUE wird erzeugt, wenn width oder height kleiner als 0 oder größer als 2 + #GL_MAX_TEXTURE_SIZE ist oder wenn entweder 2k + 2*border nicht für einen ganzzahligen Wert von k dargestellt werden kann.

#GL_INVALID_VALUE wird erzeugt, wenn border nicht 0 oder 1 ist.

#GL_INVALID_OPERATION wird erzeugt, wenn gl.TexImage2D() zwischen gl.Begin() und gl.End() ausgeführt wird.

Verbundene get-operationen
gl.GetTexImage()

gl.IsEnabled() mit dem Argument #GL_TEXTURE_2D


Navigation zeigen