error = glu.Build3DMipmaps(ifmt, width, height, depth, fmt, type, data)
glu.Build3DMipmaps()
erstellt eine Reihe von vorgefilterten 3D-Texturkarten
mit abnehmender Auflösung, genannt Mipmap. Dies wird für das Antialiasing
von texturierten Grundmuster verwendet.
Ein Rückgabewert von Null bedeutet Erfolg, ansonsten wird ein GLU-Fehlercode zurückgegeben. Siehe glu.ErrorString für Details.
Zuerst werden die width
, height
und depth
der Daten überprüft, um
festzustellen, ob sie eine Potenz von 2 haben. Andernfalls wird eine
Kopie der Daten erstellt und auf die nächstgelegene Potenz von 2 hoch-
oder herunterskaliert (wenn width
, height
und depth
genau zwischen 2
liegt, dann wird die Kopie der Daten nach oben skaliert). Diese Kopie
wird für nachfolgenden beschriebene Mipmapping-Vorgänge verwendet. Wenn
zum Beispiel die Breite 57, die Höhe 23 und die Tiefe 24 ist, dann skaliert
eine Kopie der Daten bis zu 64 in der Breite, bis zu 16 in der Höhe und
bis zu 32 in der Tiefe, bevor das Mipmapping stattfindet.
Anschließend werden Proxy-Texturen (siehe gl.TexImage3D()) verwendet, um festzustellen, ob die Implementierung zur gewünschten Textur passen kann. Wenn nicht, werden alle drei Dimensionen kontinuierlich halbiert, bis sie passen.
Als nächstes wird eine Reihe von Mipmap-Ebenen aufgebaut, indem eine Kopie der Daten in der Hälfte entlang aller drei Dimensionen dezimiert wird, bis die Größe 1x1x1 erreicht ist. Auf jeder Ebene ist jedes Texel in der halbierten Mipmap-Ebene ein Durchschnitt der entsprechenden acht Texel in der größeren Mipmap-Ebene. (Wenn genau eine der Dimensionen 1 ist, werden vier Texel gemittelt. Wenn genau zwei der Dimensionen 1 sind, werden zwei Texel gemittelt.)
gl.TexImage3D() wird aufgerufen, um jede dieser Mipmap-Ebenen zu laden.
Level 0 ist eine Kopie von Daten. Die höchste Ebene ist
log2(max(width,height,depth)). Wenn beispielsweise width
64, height
16
und depth
32 ist und die Implementierung eine Textur dieser Größe speichern
kann, werden folgende Mipmap-Level aufgebaut: 64x16x32, 32x8x16, 16x4x8,
8x2x4, 4x1x2, 2x1x1 und 1x1x1. Diese entsprechen den Stufen 0 bis 6.
ifmt
gibt das interne Format des Texturbildes an. Siehe Interne Pixelformate für Details.
Dies kann auch einer der Sonderwerte 1, 2, 3 oder 4 sein.
fmt
muss eine der folgenden Konstanten sein: #GL_COLOR_INDEX
, #GL_RED
, #GL_GREEN
,
#GL_BLUE
, #GL_ALPHA
, #GL_RGB
, #GL_RGBA
, #GL_LUMINANCE
oder #GL_LUMINANCE_ALPHA
.
type
muss eine der folgenden sein: #GL_UNSIGNED_BYTE
, #GL_BYTE
, #GL_BITMAP
,
#GL_UNSIGNED_SHORT
, #GL_SHORT
, #GL_UNSIGNED_INT
, #GL_INT
oder #GL_FLOAT
.
Bitte beachten Sie, dass dieser Befehl direkt mit Speicherzeigern arbeitet. Siehe Mit Zeigern arbeiten für Einzelheiten zur Verwendung von Speicherzeigern mit Hollywood.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
pixels
an (siehe oben)