gluBuild1DMipmaps

Aus DGL Wiki
Version vom 7. Mai 2006, 12:42 Uhr von Flash (Diskussion | Beiträge) (Beschreibung)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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