notJustCode.it
 
\\ Home : Articoli
MipMapping
Di RobyDx (del 27/07/2007 @ 14:52:22, in DirectX9, linkato 1323 volte)

Il mipmapping è una sistema di gestione delle texture basato sull'utilizzo di numerose texture per uno stesso oggetto ma che differiscono tra loro solo per la dimensione. Se ci avviciniamo ad un oggetto infatti possiamo notare che una texture di dimensioni non sufficienti appare priva di definizione e quindi poco gradevole. Contemporaneamente però texture troppo definite per oggetti distanti sono solo un grande spreco di risorse. La soluzione è quindi creare numerose copie della texture in questione cambiandole a secondo della distanza. Questa soluzione fu usata manualmente già nei primi giochi 3D: directX è in grado di gestire tutto ciò tramite il MipMapping generando automaticamente una texture contenente tutte le mappe.

Codice

t = TextureLoader.FromFile(device, AppPath() & "\texture0.bmp", 256, 256, 8,...

Nell'istruzione che vedete ho caricato da file una immagine. Notate che ho semplicemente cambiato il numero di mipLevels. In questo modo la texture creata avrà 8 texture. La creazione della texture divide per 2 ogni dimensione del livello sottostante. Quindi la prima texture avrà dimensione 256, la seconda 128, la terza 64 e così via. Calcolate bene il livello affinchè questa non scenda sotto a 1. In questo modo l'immagine verrà caricata in tutti i livelli della texture (quindi 8 volte) ma ogni volta con dimensione differente.
Un secondo modo è quello di creare la texture vuota

t = New Texture(device, 256, 256, 4, 0, Format.X8R8G8B8, Pool.Managed)

In questo esempio creo una texture con 4 livelli di mipmapping. Con l'accesso diretto alla memoria potete accedere al livello desiderato e inserire direttamente i pixel.

dest = CType(t.LockRectangle(GetType(Byte), 1, 0, pitch, 128 * 128 * 4), Byte())

Il numero 1 specifica il secondo livello di mipmapping (il primo è 0). Come vedete ho tenuto conto del fatto che il secondo livello ha profondità 128 se partiamo da 256.
L'ultimo sistema è quello di caricare una immagine già preparata. Le texture infatti possono essere salvate una volta preparate (da codice o tramite alcuni tools tra cui texture tool di microsoft). Caricatele normalmente.
Per attivare l'effetto dovete impostare il filtro di mipmapping per la texture selezionata.

device.SamplerState(0).MipFilter = TextureFilter.Linear

per la texture 0 ho specificato che le texture si alterneranno in modo lineare. Questo significa che non ci sarà un cambio secco tra le texture ma un passaggio graduale fra le stesse. Le texture si alterneranno a seconda della distanza a cui si trova l'oggetto. Altri settaggi sono

device.SamplerState(0).MipMapLevelOfDetailBias 'per il livello di dettaglio
device.SamplerState(0).MaxMipLevel 'per il massimo livello da usare.

Ora a seconda della distanza si alterneranno le texture. Questo sta alla base del suo secondo utilizzo. Se caricate immagini differenti sulla texture di ogni livello potrete creare effetti molto interessanti (ad esempio potrete caricare diverse immagini dell'acqua per fare in modo che si veda il fondo a seconda della distanza) anche se l'utilizzo principale è quello di alleggerire il programma evitando di usare texture definite per oggetti lontani. questo comunque comporterà una richiesta di memoria maggiore (circa il doppio se fate i conti).
Potete usare il mipmapping anche per texture cubiche e volumetriche e per il multitexturing.

Vi lascio all'esempio:

Esempio VB.Net

Articolo Articolo  Storico Storico Stampa Stampa
I commenti sono disabilitati.
"È più facile spezzare un atomo che un pregiudizio."

Albert Einstein


Cerca per parola chiave
 

Titolo
Articoli (4)
C++ (4)
Direct3D10 (30)
Direct3D11 (20)
DirectX9 (82)
DotNet (10)
English (9)
FanGames (22)
ManagedDX11 (2)
Materiale Utile (4)
News (39)
Shader Library (12)
SharpDX (1)
Software (25)
Tecnologia (19)
Varie (9)

Gli interventi più cliccati

Ultimi commenti:
If you wish to retai...
23/05/2013 @ 13:07:45
Di chanel outlet
You deficit of self-...
23/05/2013 @ 13:07:13
Di cartier watches uk
Reinforce your own l...
23/05/2013 @ 13:06:37
Di replica watches
Whenever you"re shiv...
23/05/2013 @ 13:06:11
Di swiss replica watches
It's likely you have...
23/05/2013 @ 13:05:02
Di chanel handbags
Cheap automobile ins...
23/05/2013 @ 13:04:28
Di replica watches

Titolo
Con quale tecnologia state realizzando o avete intenzione di realizzare i vostri progetti?

 DirectX11
 DirectX10
 DirectX9
 XNA
 DirectX8 o Precedenti
 OpenGL
 Motori grafici già pronti
 Altro

Titolo
Umorismo (17)

Le fotografie più cliccate



Ci sono 86 persone collegate
Sono state visualizzate  pagine

28/01/2022 @ 03:29:13
script eseguito in 62 ms