gluBuild1DMipmaps: Unterschied zwischen den Versionen
I0n0s (Diskussion | Beiträge) K (Rechtschreibungfehler verbessert) |
(→Beschreibung) |
||
Zeile 41: | Zeile 41: | ||
Wird '''0''' zurückgeliefert, war der Vorgang erfolgreich, andernfalls wird ein GLU-Fehler erzeugt (siehe [[gluErrorString]]).<br> | Wird '''0''' zurückgeliefert, war der Vorgang erfolgreich, andernfalls wird ein GLU-Fehler erzeugt (siehe [[gluErrorString]]).<br> | ||
<br> | <br> | ||
− | Zuallererst wird überprüft, ob ''width'' vom Typ 2^n (n: Integer) ist. Wenn das nicht der Fall ist, wird eine Kopie von ''data'' (nicht ''data''selbst!) zur nächsten Zahl 2^n verkleinert oder vergrößert. Diese Kopie wird für spätere Mipmapping-Operationen verwendet. (Wenn ''width'' genau zwischen zwei Zahlen vom Typ 2^n und 2^m (n, m: Integer; m=n+1) liegt, dann wird ''width'' vergrößert.) Wenn ''width'' zum Beispiel 57 ist, dann wird eine Kopie von ''data'' auf 64 vergrößert, bevor das | + | Zuallererst wird überprüft, ob ''width'' vom Typ 2^n (n: Integer) ist. Wenn das nicht der Fall ist, wird eine Kopie von ''data'' (nicht ''data'' selbst!) zur nächsten Zahl 2^n verkleinert oder vergrößert. Diese Kopie wird für spätere Mipmapping-Operationen verwendet. (Wenn ''width'' genau zwischen zwei Zahlen vom Typ 2^n und 2^m (n, m: Integer; m=n+1) liegt, dann wird ''width'' vergrößert.) Wenn ''width'' zum Beispiel 57 ist, dann wird eine Kopie von ''data'' auf 64 vergrößert, bevor das Mipmapping durchgeführt wird.<br> |
<br> | <br> | ||
Anschließend werden Proxy-Texturen (siehe [[glTexImage1D]]) verwendet, um herauszufinden, ob es möglich ist, die angeforderte Textur zu verarbeiten. Wenn nicht, wird ''width'' solange halbiert, bis es möglich ist.<br> | Anschließend werden Proxy-Texturen (siehe [[glTexImage1D]]) verwendet, um herauszufinden, ob es möglich ist, die angeforderte Textur zu verarbeiten. Wenn nicht, wird ''width'' solange halbiert, bis es möglich ist.<br> | ||
Zeile 52: | Zeile 52: | ||
<br> | <br> | ||
+ | |||
== Hinweise == | == Hinweise == | ||
Man beachte, dass es keinen direkten Weg gibt, das größtmögliche Level herauszufinden. Das kann indirekt durch [[glGetTexLevelParameter]] gemacht werden. Als erstes fragt man dazu die Breite bei Level 0 ab. (Die Breite muss nicht zwangläufig gleich ''width'' sein, da anhand Zwischentexturen vergrößert/verkleinert werden sein konnte.) Dann ist das maximale Level log2(Breite). | Man beachte, dass es keinen direkten Weg gibt, das größtmögliche Level herauszufinden. Das kann indirekt durch [[glGetTexLevelParameter]] gemacht werden. Als erstes fragt man dazu die Breite bei Level 0 ab. (Die Breite muss nicht zwangläufig gleich ''width'' sein, da anhand Zwischentexturen vergrößert/verkleinert werden sein konnte.) Dann ist das maximale Level log2(Breite). |
Version vom 3. September 2005, 14:59 Uhr
Inhaltsverzeichnis
gluBuild1DMipmaps
Name
gluBuild1DMipmaps - Erzeugt eine eindimensionale Mipmap
Delphi-Spezifikation
function gluBuild1DMipmaps(target : GLenum; internalFormat : GLint; width : GLsizei;
format : GLenum; type : GLenum; data : ^Pointer) : GLint
Parameter
target | Gibt die Zieltextur an. Muss vom Typ 'GL_TEXTURE_1D sein. |
---|---|
internalFormat | Fragt das interne Speicherformat der Textur ab. Muss entweder 1, 2, 3, 4 oder eine der folgenden symbolischen Konstanten sein: GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_RGB, GL_R3_G3_B2, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12 oder GL_RGBA16. |
width | Gibt die Breite der Textur in Pixeln an. |
format | Gibt das Format der Pixeldaten an. Muss einer der folgenden Werte sein: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE und GL_LUMINANCE_ALPHA. |
type | Gibt den Datentyp von data an. Muss einer der folgenden Werte sein: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT oder GL_FLOAT |
data | Gibt den Pointer auf die Bilddaten im Speicher an. |
Beschreibung
gluBuild1DMipmaps erzeugt eine Reihe von vorgefilterten eindimensionalen Texturmaps mit kleiner werdenden Auflösungen, genannt Mipmap. Das wird für das Antialiasing von texturierten Polygonen benutzt.
Wird 0 zurückgeliefert, war der Vorgang erfolgreich, andernfalls wird ein GLU-Fehler erzeugt (siehe gluErrorString).
Zuallererst wird überprüft, ob width vom Typ 2^n (n: Integer) ist. Wenn das nicht der Fall ist, wird eine Kopie von data (nicht data selbst!) zur nächsten Zahl 2^n verkleinert oder vergrößert. Diese Kopie wird für spätere Mipmapping-Operationen verwendet. (Wenn width genau zwischen zwei Zahlen vom Typ 2^n und 2^m (n, m: Integer; m=n+1) liegt, dann wird width vergrößert.) Wenn width zum Beispiel 57 ist, dann wird eine Kopie von data auf 64 vergrößert, bevor das Mipmapping durchgeführt wird.
Anschließend werden Proxy-Texturen (siehe glTexImage1D) verwendet, um herauszufinden, ob es möglich ist, die angeforderte Textur zu verarbeiten. Wenn nicht, wird width solange halbiert, bis es möglich ist.
Als nächstes wird eine Reihe von Mipmap-Leveln erzeugt, indem eine Kopie von data solange halbiert wird, bis die Größe 1 erreicht ist. Bei jedem Level ist das Texel des halbierten Mipmap-Levels der Durchschnitt des nächstgrößeren Levels.
glTexImage1D wird aufgerufen, um jeden dieser Mipmap-Level zu laden. Das Level 0 ist eine Kopie von data. Der höchste Level ist log2(width). Ist width zum Beipiel 64, und die Speicherung einer Textur dieser Größe möglich ist, dann werden folgende Mipmap-Level erzeugt: 64x1, 32x1, 16x1, 8x1, 4x1, 2x1 und 1x1. Dies entspricht dann beispielsweise den Leveln von 0 bis 6.
Man lese auch die Artikel zu glTexImage1D, um eine Beschreibung der akzeptablen Werte für type zu erhalten und glDrawPixels, um eine Beschreibung der akzeptablen Werte für data zu erhalten.
Hinweise
Man beachte, dass es keinen direkten Weg gibt, das größtmögliche Level herauszufinden. Das kann indirekt durch glGetTexLevelParameter gemacht werden. Als erstes fragt man dazu die Breite bei Level 0 ab. (Die Breite muss nicht zwangläufig gleich width sein, da anhand Zwischentexturen vergrößert/verkleinert werden sein konnte.) Dann ist das maximale Level log2(Breite).
Fehlermeldungen
GLU_INVALID_VALUE wird generiert, wenn width kleiner als 1 ist.
GLU_INVALID_ENUM wird generiert, wenn internalFormat, format oder type keine zulässigen Werte haben.
Siehe auch
glDrawPixels, glTexImage1D, glTexImage2D, gluBuild2DMipmaps, gluErrorString, gluScaleImage