Antworten:
Die Regel ist, dass Sie zur Berechnung der nächsten Mipmap-Größe durch zwei dividieren und auf die nächste Ganzzahl abrunden (es sei denn, es wird auf 0 abgerundet, in diesem Fall ist es stattdessen 1). Ein 57x43-Bild hätte beispielsweise Mipmaps wie:
level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1
UV-Mapping, LOD-Auswahl und Filterung funktionieren genauso wie bei Texturgrößen mit Zweierpotenz.
Das Generieren von Mips mit guter Qualität für eine Textur ohne Zweierpotenz ist etwas komplizierter, da Sie nicht einfach einen Durchschnitt von 2 x 2 Pixel für das Downsample in allen Fällen berechnen können. Allerdings war ein 2x2-Box-Filter anfangs nicht so toll, weshalb die Verwendung eines besseren Downsampling-Filters wie Mitchell-Netravali unabhängig von der Texturgröße empfohlen wird.
Man kann sich das so vorstellen, dass Grafikkarten häufig Texturen ohne Zweierpotenzen implementieren, indem sie sie einfach auffüllen, bis sie in jeder Richtung eine Zweierpotenz haben. Dadurch funktionieren die meisten Dinge "nur": Kacheln und Hardware-Filterung zum Beispiel. Das einzige, was geändert werden muss, ist die Konvertierung von Texturkoordinaten in Bildkoordinaten.
Bei einer solchen Implementierung ist es offensichtlich, wie Mipmapping durchgeführt wird: Es ändert sich nichts. Selbst wenn Sie eine GPU haben, die Texturen ohne Auffüllung ohne Potenz von 2 unterstützt, würden die Mipmap-Ebenen mit "Auffüllung" enden. zB würde eine 3x3 Textur eine 2x2 Textur als lod 1 haben.