Bezeichnung
gl.TexParameter -- stellt Texturparameter ein
Übersicht
gl.TexParameter(target, pname, param)
Beschreibung
Texturzuordnung ist eine Technik, die ein Bild auf die Oberfläche eines Objekts aufbringt, als wäre das Bild eine Dekor- oder Zellophan-Schrumpffolie. Das Bild wird im Texturraum mit einem Koordinatensystem (s, t) erstellt. Eine Textur ist ein ein- oder zweidimensionales Bild und eine Reihe von Parametern, die bestimmen, wie Muster aus dem Bild abgeleitet werden.

gl.TexParameter() weist dem als pname angegebenen Texturparameter den oder die Werte in param zu. target definiert die Zieltextur, entweder #GL_TEXTURE_1D oder #GL_TEXTURE_2D. Die folgenden Symbole werden im pname akzeptiert:

#GL_TEXTURE_MIN_FILTER
Die Texturbearbeitungsfunktion wird immer dann verwendet, wenn das zu texturierende Pixel auf einen Bereich mit mehr als einem Textelement abgebildet wird. Es gibt sechs definierte Minifizierungsfunktionen. Zwei von ihnen verwenden das nächstgelegene eine oder die nächstgelegenen vier Textelemente, um den Texturwert zu berechnen. Die anderen vier verwenden Mipmaps.

Eine Mipmap ist ein geordneter Satz von Feldern, die das gleiche Bild bei immer niedrigeren Auflösungen darstellen: 2^a für 1D Mipmaps und 2^a*2^b für 2D Mipmaps.

Wenn eine 2D-Textur beispielsweise die Abmessungen 2^m*2^n hat, gibt es max(m, n) + 1 Mipmaps. Das erste Mipmap ist die ursprüngliche Textur mit den Abmessungen 2^m*2^n. Jede nachfolgende Mipmap hat die Abmessungen 2^k-1*2^l-1, wobei 2^k*2^l die Abmessungen der vorherigen Mipmap sind, bis entweder k=0 oder l=0. An diesem Punkt haben die nachfolgenden Mipmaps die Abmessungen 1*2^l-1 oder 2^k-1*1 bis zur endgültigen Mipmap, die die Abmessungen 1x1 hat. Um die Mipmaps zu definieren, rufen Sie gl.TexImage1D(), gl.TexImage2D() oder gl.CopyTexImage() mit dem Level-Argument auf, das die Reihenfolge der Mipmaps angibt. Level 0 ist die ursprüngliche Textur; Level max(m, n) ist die letzte 1x1 Mipmap. param liefert eine Funktion zur Verkleinerung der Textur als eine der folgenden:

#GL_NEAREST
Liefert den Wert des Texturelements, das am nächsten (in Manhattan-Metrik) zur Mitte des zu texturierenden Pixels liegt.

#GL_LINEAR
Liefert den bewerteten Mittelwert der vier Texturelemente, die der Mitte des zu texturierenden Pixels am nächsten liegen. Diese können Randtexturelemente beinhalten, abhängig von den Werten von #GL_TEXTURE_WRAP_S und #GL_TEXTURE_WRAP_T sowie von der genauen Zuordnung.

#GL_NEAREST_MIPMAP_NEAREST
Wählt die Mipmap, die der Größe des zu texturierenden Pixels am nächsten kommt und verwendet das Kriterium #GL_NEAREST (das Texturelement, das der Mitte des Pixels am nächsten liegt), um einen Texturwert zu erzeugen.

#GL_LINEAR_MIPMAP_NEAREST
Wählt die Mipmap, die der Größe des zu texturierenden Pixels am nächsten kommt und verwendet das Kriterium #GL_LINEAR (ein bewerteter Durchschnitt der vier Texturelemente, die der Mitte des Pixels am nächsten liegen), um einen Texturwert zu erzeugen.

#GL_NEAREST_MIPMAP_LINEAR
Wählt die beiden Mipmaps aus, die der Größe des zu texturierenden Pixels am nächsten kommen und verwendet das Kriterium #GL_NEAREST (das Texturelement, das der Mitte des Pixels am nächsten liegt), um aus jedem Mipmap einen Texturwert zu erzeugen. Der endgültige Texturwert ist ein bewerteter Durchschnitt dieser beiden Werte.

#GL_LINEAR_MIPMAP_LINEAR
Wählt die beiden Mipmaps aus, die der Größe des zu texturierenden Pixels am nächsten kommen und verwendet das Kriterium #GL_LINEAR (ein bewerteter Durchschnitt der vier Texturelemente, die der Mitte des Pixels am nächsten liegen), um aus jeder Mipmap einen Texturwert zu erzeugen. Der endgültige Texturwert ist ein bewerteter Durchschnitt dieser beiden Werte.

Da im Verkleinerungsprozess mehr Texturelemente gesampelt werden, werden weniger Aliasing-Artefakte sichtbar. Während die Verkleinerungsfunktionen #GL_NEAREST und #GL_LINEAR schneller sind als die anderen vier, da sie nur ein oder vier Texturelemente abtasten, um den Texturwert des gerenderten Pixels zu bestimmen, können sie aber Moiré-Muster oder unregelmäßige Übergänge erzeugen. Der Initialwert von #GL_TEXTURE_MIN_FILTER ist #GL_NEAREST_MIPMAP_LINEAR.

#GL_TEXTURE_MAG_FILTER
Die Texturvergrößerungsfunktion wird verwendet, wenn das zu texturierende Pixel auf einen Bereich kleiner oder gleich einem Textelement abgebildet wird. Es stellt die Texturvergrößerungsfunktion entweder auf #GL_NEAREST oder #GL_LINEAR (siehe unten). #GL_NEAREST ist im Allgemeinen schneller als #GL_LINEAR, aber es kann strukturierte Bilder mit schärferen Kanten erzeugen, da der Übergang zwischen den Texturelementen nicht so glatt ist. Der Initialwert von #GL_TEXTURE_MAG_FILTER ist #GL_LINEAR.

#GL_NEAREST
Liefert den Wert des Texturelements, das am nächsten (in Manhattan-Metrik) zur Mitte des zu texturierenden Pixels liegt.

#GL_LINEAR
Liefert den bewerteten Mittelwert der vier Texturelemente, die der Mitte des zu texturierenden Pixels am nächsten liegen. Diese können Randtexturelemente beinhalten, abhängig von den Werten von #GL_TEXTURE_WRAP_S und #GL_TEXTURE_WRAP_T sowie von der genauen Zuordnung.

#GL_TEXTURE_WRAP_S
Setzt den Wrap-Parameter für die Texturkoordinate s auf #GL_CLAMP oder #GL_REPEAT. #GL_CLAMP bewirkt, dass die s-Koordinaten auf den Bereich [0, 1] festgelegt werden und ist nützlich, um Wrapping-Artefakte beim zuordnen eines einzelnen Bildes auf ein Objekt zu verhindern. #GL_REPEAT bewirkt, dass der ganzzahlige Teil der s-Koordinate ignoriert wird; GL verwendet nur den Bruchteil und erzeugt so ein sich wiederholendes Muster. Auf Randtexturelemente wird nur zugegriffen, wenn das Wrapping auf #GL_CLAMP gesetzt ist. Zunächst wird #GL_TEXTURE_WRAP_S auf #GL_REPEAT gesetzt.

#GL_TEXTURE_WRAP_T
Setzt den Wrap-Parameter für die Texturkoordinate t auf #GL_CLAMP oder #GL_REPEAT. Siehe die Erläuterung unter #GL_TEXTURE_WRAP_S. Zunächst wird #GL_TEXTURE_WRAP_T auf #GL_REPEAT gesetzt.

#GL_TEXTURE_WRAP_R_EXT
Setzt den Wrap-Parameter für die Texturkoordinate r auf #GL_CLAMP oder #GL_REPEAT. Siehe die Erläuterung unter #GL_TEXTURE_WRAP_S. Zunächst wird #GL_TEXTURE_WRAP_R_EXT auf #GL_REPEAT gesetzt.

#GL_TEXTURE_BORDER_COLOR
Setzt eine Rahmenfarbe. param muss eine Tabelle mit vier Gleitkommawerten sein, die die RGBA-Farbe des Texturrandes umfassen. Zunächst ist die Randfarbe (0, 0, 0, 0).

#GL_TEXTURE_PRIORITY
Gibt die Priorität der Texturresidenz der aktuell gebundenen Textur an. Die zulässigen Werte liegen im Bereich [0, 1]. Siehe gl.PrioritizeTextures für Details.

Angenommen, ein Programm hat die Texturierung aktiviert (durch Aufruf von gl.Enable() mit dem Argument #GL_TEXTURE_1D oder #GL_TEXTURE_2D) und hat #GL_TEXTURE_MIN_FILTER auf eine der Funktionen gesetzt, die eine Mipmap erfordert. Wenn entweder die Dimensionen der aktuell definierten Texturbilder (mit vorherigen Aufrufen von gl.TexImage1D(), gl.TexImage2D() oder gl.CopyTexImage()) nicht der richtigen Reihenfolge für Mipmaps (siehe oben) folgen, oder es sind weniger Texturbilder definiert als benötigt werden, oder der Satz von Texturbildern hat eine unterschiedliche Anzahl von Texturkomponenten, dann ist es, als ob die Texturzuordnung deaktiviert wäre.

Die lineare Filterung greift nur in 2D-Texturen auf die vier nächstgelegenen Textelemente zu. In 1D-Texturen greift die lineare Filterung auf die beiden nächstgelegenen Textelemente zu.

Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.

Eingaben
target
gibt die Zieltextur an, die entweder #GL_TEXTURE_1D oder #GL_TEXTURE_2D sein muss
pname
gibt den symbolischen Namen eines Texturparameters an (siehe oben)
param
spezifiziert einen Einzelwert oder eine Tabelle, die den Wert für pname enthält
Fehler
#GL_INVALID_ENUM wird erzeugt, wenn target oder pname nicht einer der akzeptierten definierten Werte ist.

#GL_INVALID_ENUM wird erzeugt, wenn param einen definierten konstanten Wert haben sollte (basierend auf dem Wert von pname) und es nicht hat.

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

Verbundene get-operationen
gl.GetTexParameter()

gl.GetTexLevelParameter()


Navigation zeigen