Risposte:
La regola è che per calcolare la dimensione successiva della mipmap, dividi per due e arrotondhi per difetto all'intero più vicino (a meno che non venga arrotondato per difetto a 0, nel qual caso invece è 1). Ad esempio, un'immagine 57x43 avrebbe mipmap come:
level 0: 57x43
level 1: 28x21
level 2: 14x10
level 3: 7x5
level 4: 3x2
level 5: 1x1
La mappatura UV, la selezione LOD e il filtraggio funzionano allo stesso modo delle dimensioni di trama a potenza di due.
Generare mips di buona qualità per una trama non-power-of-two è un po 'più complicato, poiché non puoi semplicemente fare la media di una scatola di pixel 2x2 per sottocampionare in tutti i casi. Tuttavia, un filtro box 2x2 non era eccezionale all'inizio, quindi è consigliabile utilizzare un filtro di downsampling migliore come Mitchell-Netravali indipendentemente dalle dimensioni della trama.
Un modo di pensarci è che le schede grafiche spesso implementano trame non di potenza di 2 semplicemente riempendole fino a quando non hanno una potenza di 2 in ogni direzione. Questo rende la maggior parte delle cose "semplicemente funzionanti": piastrellatura e filtro hardware, per esempio. L'unica cosa che deve cambiare è la conversione da coordinate di trama a coordinate di immagine.
Se implementato in questo modo, è ovvio come fare il mipmapping: nulla cambia. Anche se disponi di una GPU che supporta trame non power-of-2 senza riempimento, i livelli di mipmap finirebbero con "riempimento". ad esempio una trama 3x3 avrebbe una trama 2x2 come lod 1.