glTexParameter: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) K (Bilder ans ende der Beschreibung verlagert und innerhalb der Beschreibung darauf verwiesen.) |
Flash (Diskussion | Beiträge) K (→Beschreibung: Linkinflation eingedämmt.) |
||
Zeile 66: | Zeile 66: | ||
: Die Texturen-Verkleinerungsfunktion wird immer dann genutzt, wenn der zu texturierende Pixel auf eine Fläche gemappt wird, die größer als ein Texturenelement ist. Es gibt sechs definierte Verkleinerungsfunktionen, zwei davon nutzen den nächsten bzw. die nächsten vier Texturenelemente um den Texturenwert zu berechnen. Die anderen vier benutzen [[MipMaps]]. (siehe [[glTexParameter#Vergleich_zwischen_verschiedenen_Texturfiltern| Texturfilterbeispiele]]) | : Die Texturen-Verkleinerungsfunktion wird immer dann genutzt, wenn der zu texturierende Pixel auf eine Fläche gemappt wird, die größer als ein Texturenelement ist. Es gibt sechs definierte Verkleinerungsfunktionen, zwei davon nutzen den nächsten bzw. die nächsten vier Texturenelemente um den Texturenwert zu berechnen. Die anderen vier benutzen [[MipMaps]]. (siehe [[glTexParameter#Vergleich_zwischen_verschiedenen_Texturfiltern| Texturfilterbeispiele]]) | ||
− | : Eine [[MipMaps|MipMap]] ist ein sortierter Satz von Bildern, der das selbe Bild in progressiv kleineren Auflösungen darstellt. Wenn die Texturendimension 2^n * 2^n entsprocht, gibt es Maximum(n, m) + 1 | + | : Eine [[MipMaps|MipMap]] ist ein sortierter Satz von Bildern, der das selbe Bild in progressiv kleineren Auflösungen darstellt. Wenn die Texturendimension 2^n * 2^n entsprocht, gibt es Maximum(n, m) + 1 MipMaps. Die erste MipMap ist die original Textur, deren Dimension 2^n * 2^n* beträgt. Jede folgende MipMap entspricht dann der Dimension 2^k(-1) * 2^l(-1), wobei 2^k * 2^l die Dimension der vorherigen MipMap darstellen. Dies wird solange vollzogen bis entweder k oder l gleich 0 ist. Ab dieem Punkt haben folgende MipMaps Dimensionen vom Format 1*2^l-1 oder 2^k-1*1, bis zur finalen Mipmap, die 1*1 Pixel groß ist. MipMaps werden über [[glTexImage]]1D oder [[glTexImage]]2D über den Detaillevel-Parameter spezifiziert. Level 0 ist die original Textur, Level Maximum(n, m) ist dann die finale 1*1 MipMap. Mittels der [[GLU]]-Bibliothek lassen sich MipMaps übrigens direkt generieren, dazu gibt es die Befehle [[gluBuild1DMipmaps]], [[gluBuild2DMipmaps]] und [[gluBuild3DMipmaps]]. |
:''params'' liefert folgende Funktionen zur Verkleinerung von Texturen. Dies wären: | :''params'' liefert folgende Funktionen zur Verkleinerung von Texturen. Dies wären: | ||
Zeile 83: | Zeile 83: | ||
:'''GL_NEAREST_MIPMAP_LINEAR''' | :'''GL_NEAREST_MIPMAP_LINEAR''' | ||
− | :: Wählt die zwei [[MipMaps]], die der Größe des zu texturierenden Pixels am besten entsprechen, und nutzt die Kriterien von '''GL_NEAREST''' um Texturenwerte aus jeder | + | :: Wählt die zwei [[MipMaps]], die der Größe des zu texturierenden Pixels am besten entsprechen, und nutzt die Kriterien von '''GL_NEAREST''' um Texturenwerte aus jeder MipMap zu generieren. Der endgültige Texturenwert ist das gewichtete Mittel aus diesen beiden Werten. |
:'''GL_LINEAR_MIPMAP_LINEAR''' | :'''GL_LINEAR_MIPMAP_LINEAR''' | ||
− | :: Wählt die zwei [[MipMaps]], die der Größe des zu texturierenden Pixels am besten entsprechen, und nutzt die Kriterien von '''GL_LINEAR''' um Texturenwerte aus jeder | + | :: Wählt die zwei [[MipMaps]], die der Größe des zu texturierenden Pixels am besten entsprechen, und nutzt die Kriterien von '''GL_LINEAR''' um Texturenwerte aus jeder MipMap zu generieren. Der endgültige Texturenwert ist das gewichtete Mittel aus diesen beiden Werten. |
: Je mehr Texturenelemente im Verkleinerungsprozess genutzt werden, desto weniger Kantenartifakte werden sichtbar. Während '''GL_NEAREST''' und '''GL_LINEAR'''-Verkleinerungsfunktionen schneller als die anderen sind, ermitteln sie nur einen bzw. vier Texturenwerte um den endgültigen Texturenwert des zu texturierenden Pixels zu ermitteln, wodurch eher Moiré-Muster oder rauhe Übergänge entstehen. Voreinstellung für '''GL_TEXTURE_MIN_FILTER''' ist '''GL_NEAREST_MIPMAP_LINEAR'''. | : Je mehr Texturenelemente im Verkleinerungsprozess genutzt werden, desto weniger Kantenartifakte werden sichtbar. Während '''GL_NEAREST''' und '''GL_LINEAR'''-Verkleinerungsfunktionen schneller als die anderen sind, ermitteln sie nur einen bzw. vier Texturenwerte um den endgültigen Texturenwert des zu texturierenden Pixels zu ermitteln, wodurch eher Moiré-Muster oder rauhe Übergänge entstehen. Voreinstellung für '''GL_TEXTURE_MIN_FILTER''' ist '''GL_NEAREST_MIPMAP_LINEAR'''. | ||
Zeile 151: | Zeile 151: | ||
|[[Bild:S_repeat_t_repeat.jpg|center]] | |[[Bild:S_repeat_t_repeat.jpg|center]] | ||
|} | |} | ||
− | |||
− | |||
== Hinweise == | == Hinweise == |
Version vom 28. Juni 2006, 14:16 Uhr
Inhaltsverzeichnis
glTexParameter
Name
glTexParameter Funktionen - setzen Textureigenschaften.
Delphi-Spezifikation
procedure glTexParameterf(target: TGLenum; pname: TGLenum; param: TGLfloat); procedure glTexParameteri(target: TGLenum; pname: TGLenum; param: TGLint);
Parameter
target | Bestimmt die Zieltextur welche GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D sein kann. |
pname | Bestimmt den symbolischen Namen eines Parameters der einen Einzelwert enthält. Folgende Werte werden akzeptiert: GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_S, oder GL_TEXTURE_WRAP_T. |
param | Enthält den Wert für pname. |
Delphi-Spezifikation
procedure glTexParameterfv(target: TGLenum; pname: TGLenum; const params: PGLfloat); procedure glTexParameteriv(target: TGLenum; pname: TGLenum; const params: PGLint);
Parameter
target | Bestimmt die Zieltextur welche GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D sein kann. |
pname | Bestimmt den symbolischen Namen eines Parameters der einen Einzelwert enthält. Folgende Werte werden akzeptiert: GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T oder GL_TEXTURE_BORDER_COLOR. |
params | Ist ein Zeiger auf ein Feld welches die oder den Wert für pname enthält. |
Beschreibung
Texturmapping ist eine Technik die Bilder (oder Ausschnitte von Bildern) auf die Oberfläche von Objekten "aufklebt". Man kann sich dies tatsächlich so vorstellen wie das aufkleben von Tapeten an Wände. Das Bild wir im Texturenraum, welcher über ein (s,t) Koordinatensystem verfügt, erstellt. Eine Textur ist ein ein-, zwei- und mittlerweile auch dreidimensionales Bild inklusive einiger Parameter die bestimmen wie Texturen/Texturausschnitte aus dem Bild gewonnen werden sollen.
Mit der Funktion glTexParameter kann man den mit pname ausgewiesenen Parametern die Werte zuweisen, die man über params spezifiziert hat. target wiederum definiert den Typ der Zieltextur. Als Werte werden GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D akzeptiert. Die folgenden symbolischen Werte kann man dem Parameter pname zuweisen:
GL_TEXTURE_MIN_FILTER
- Die Texturen-Verkleinerungsfunktion wird immer dann genutzt, wenn der zu texturierende Pixel auf eine Fläche gemappt wird, die größer als ein Texturenelement ist. Es gibt sechs definierte Verkleinerungsfunktionen, zwei davon nutzen den nächsten bzw. die nächsten vier Texturenelemente um den Texturenwert zu berechnen. Die anderen vier benutzen MipMaps. (siehe Texturfilterbeispiele)
- Eine MipMap ist ein sortierter Satz von Bildern, der das selbe Bild in progressiv kleineren Auflösungen darstellt. Wenn die Texturendimension 2^n * 2^n entsprocht, gibt es Maximum(n, m) + 1 MipMaps. Die erste MipMap ist die original Textur, deren Dimension 2^n * 2^n* beträgt. Jede folgende MipMap entspricht dann der Dimension 2^k(-1) * 2^l(-1), wobei 2^k * 2^l die Dimension der vorherigen MipMap darstellen. Dies wird solange vollzogen bis entweder k oder l gleich 0 ist. Ab dieem Punkt haben folgende MipMaps Dimensionen vom Format 1*2^l-1 oder 2^k-1*1, bis zur finalen Mipmap, die 1*1 Pixel groß ist. MipMaps werden über glTexImage1D oder glTexImage2D über den Detaillevel-Parameter spezifiziert. Level 0 ist die original Textur, Level Maximum(n, m) ist dann die finale 1*1 MipMap. Mittels der GLU-Bibliothek lassen sich MipMaps übrigens direkt generieren, dazu gibt es die Befehle gluBuild1DMipmaps, gluBuild2DMipmaps und gluBuild3DMipmaps.
- params liefert folgende Funktionen zur Verkleinerung von Texturen. Dies wären:
- GL_NEAREST
- Liefert den Wert des Texturelements, welches am nächsten (in Manhattendistanz) zum Zentrum des zu texturierenden Pixels liegt.
- GL_LINEAR
- Liefert den gewichteten Mittelwert der vier Texturenelemente die dem Zentrum des zu texturierenden Pixels am nächsten liegen. Dies kann Randpixel-Elemente einschliessen, je nachdem wie GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T eingestellt sind.
- GL_NEAREST_MIPMAP_NEAREST
- Wählt die MipMap, die der Größe des zu texturierenden Pixels am besten entspricht, und nutzt die Kriterien von GL_NEAREST um den Texturenwert zu generieren.
- GL_LINEAR_MIPMAP_NEAREST
- Wählt die MipMap, die der Größe des zu texturierenden Pixels am besten entspricht, und nutzt die Kriterien von GL_LINEAR um den Texturenwert zu generieren.
- GL_NEAREST_MIPMAP_LINEAR
- Wählt die zwei MipMaps, die der Größe des zu texturierenden Pixels am besten entsprechen, und nutzt die Kriterien von GL_NEAREST um Texturenwerte aus jeder MipMap zu generieren. Der endgültige Texturenwert ist das gewichtete Mittel aus diesen beiden Werten.
- GL_LINEAR_MIPMAP_LINEAR
- Wählt die zwei MipMaps, die der Größe des zu texturierenden Pixels am besten entsprechen, und nutzt die Kriterien von GL_LINEAR um Texturenwerte aus jeder MipMap zu generieren. Der endgültige Texturenwert ist das gewichtete Mittel aus diesen beiden Werten.
- Je mehr Texturenelemente im Verkleinerungsprozess genutzt werden, desto weniger Kantenartifakte werden sichtbar. Während GL_NEAREST und GL_LINEAR-Verkleinerungsfunktionen schneller als die anderen sind, ermitteln sie nur einen bzw. vier Texturenwerte um den endgültigen Texturenwert des zu texturierenden Pixels zu ermitteln, wodurch eher Moiré-Muster oder rauhe Übergänge entstehen. Voreinstellung für GL_TEXTURE_MIN_FILTER ist GL_NEAREST_MIPMAP_LINEAR.
GL_TEXTURE_MAG_FILTER
- Die Textur-Vergrößerungsfunktion wird benutzt wenn das zu texturierenden Pixel durch eine Fläche, die größer oder gleich einem Texturelement ist, texturiert werden soll. (siehe Texturfilterbeispiele)
- Die Funktion kann dabei auf einen der folgenden Werte gesetzt werden:
- GL_NEAREST
- Liefert den Wert des Texturelements, welches am nächsten (in Manhattendistanz) zum Zentrum des zu texturierenden Pixels liegt.
- GL_LINEAR
- Liefert den gewichteten Mittelwert der vier Teexturenelemente zurück, die dem Zentrum des zu texturierenden Pixels am nächsten sind. Dies kann Randpixel-Elemente einschliessen, je nachdem wie GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T eingestellt sind.
- GL_NEAREST ist im Normalfall schneller als GL_LINEAR, aber produziert auch Bilder mit schärferen Kanten, da der Übergang zwischen den Texturelementen nicht so weich ist. Voreinstellung für GL_TEXTURE_MAG_FILTER ist GL_LINEAR.
GL_TEXTURE_WRAP_S
- Setzt den Umwicklungsparameter für die Texturkoordiante s auf entweder GL_CLAMP oder GL_REPEAT. Mit GL_CLAMP wird die s-Koordinate auf die Reichweite [0,1] beschränkt, und ist nützlich wenn Umwicklungsartifakte beim Mapping eines einzelnen Bildes auf ein Objekt vermieden werden sollen. GL_REPEAT ignoriert den Ganzzahlanteil der s-Koordinate, genutzt wird also nur der Nachkommateil, wodurch ein Wiederholungsmuster entsteht. Randtexturenelemente werden nur dann genutzt, wenn Umwicklung auf GL_CLAMP gesetzt wird. Voreinstellung für GL_TEXTURE_WRAP_S ist GL_REPEAT. (siehe Wraptypen)
GL_TEXTURE_WRAP_T
- Setzt den Umwicklungsparameter für die Texturkoordinate auf entweder GL_CLAMP oder GL_REPEAT. Siehe obiges Kapitel für eine genauere Erklärung. Voreinstellung für GL_TEXTURE_WRAP_T ist GL_REPEAT. (siehe Wraptypen)
GL_TEXTURE_BORDER_COLOR
- Setzt die Randfarbe. Der Parameter params enthält vier Werte, die den RGBA-Farbwert für den Texturenrand darstellen. Ganzzahlfarbwerte werden linear interpretiert, so dass der höchste positive Ganzzahlwert auf 1.0 gemappt wird, und der negativste Wert auf -1.0. Die Werte werden dann auf den Bereich [0,1] beschränkt. Voreinstellung für die Randfarbe ist (0, 0, 0, 0).
Vergleich zwischen verschiedenen Texturfilter
Textur ohne Filterung. | Textur mit linearer Filterung. | Textur mit Mipmapping und linearer Filterung. |
MAG_FILTER : GL_NEAREST | MAG_FILTER : GL_LINEAR | MAG_FILTER : GL_LINEAR |
MIN_FILTER : GL_NEAREST | MIN_FILTER : GL_LINEAR | MIN_FILTER : GL_LINEAR_MIPMAP_LINEAR |
Vergleich zwischen verschiedenen Texturwraptypen
WRAP_S : GL_CLAMP | WRAP_S : GL_REPEAT | |
---|---|---|
WRAP_T : GL_CLAMP | ||
WRAP_T : GL_REPEAT |
Hinweise
Angenommen Texturen sind aktiviert (durch Aufruf von glEnable mit dem Argument GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D) und GL_TEXTURE_MIN_FILTER ist auf eine der Funktionen gesetzt, die eine Mipmap benötigen.
Wenn entweder die Ausmaße des aktuellen Texturbildes (zuvor gesetzt durch Aufruf von glTexImage1D oder glTexImage2D) nicht den Anforderungen für Mipmaps genügen oder weniger Texturbilder als nötig definiert sind oder das Texturenset abweichende Anzahlen von Texturkomponenten hat, wirkt sich das aus, als ob Texturmapping deaktiviert wäre.
Lineare Filterung greift nur in 2D-Texturen auf die vier nächsten Texturelemente zu. Bei 1D-Texturen greift Lineare Filterung auf die zwei nächsten Texturelemente zu.
Fehlermeldungen
GL_INVALID_Enum wird generiert wenn target oder pname kein gültiger Wert übergeben wurde, oder wenn params einen definierten, konstanten Wert (basierend auf den Wert von pname) erwartet und diesen nicht bekommt.
GL_INVALID_OPERATION wird generiert wenn glTexParameter innerhalb eines glBegin-glEnd Blocks aufgerufen wird.
Zugehörige Wertrückgaben
glGetTexParameter
glGetTexLevelParameter