Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Una risorsa trama è una struttura di dati in cui memorizzare i texel, ovvero la più piccola unità di una trama su cui è possibile leggere o scrivere. Quando la texture viene letta da uno shader, può essere filtrata dai texture sampler.
Una risorsa di texture è una raccolta strutturata di dati progettata per archiviare i texel. Il texel rappresenta l'unità più piccola di una texture su cui la pipeline può leggere o scrivere. A differenza dei buffer, le texture possono essere filtrate dai campionatori di texture mentre vengono lette dalle unità shader. Il tipo di trama influisce sulla modalità di filtro della trama. Ogni texel contiene da 1 a 4 componenti, disposti in uno dei formati DXGI definiti dall'enumerazione DXGI_FORMAT.
Le texture vengono create come una risorsa organizzata con dimensioni note. Tuttavia, ogni trama può essere tipizzata o non tipizzata quando la risorsa viene creata, purché il tipo venga specificato completamente usando una visualizzazione quando la trama è collegata alla pipeline.
tipi di trama
Direct3D supporta diverse rappresentazioni a virgola mobile. Tutti i calcoli a virgola mobile si realizzano secondo un sottoinsieme definito delle regole a virgola mobile del formato a precisione singola a 32 bit dello standard IEEE 754.
Esistono diversi tipi di texture: 1D, 2D, 3D, ognuna delle quali può essere creata con o senza mipmap. Direct3D supporta anche array di texture e texture multisample.
trame 1D
Una texture 1D nella sua forma più semplice contiene dati di texture che possono essere indirizzati con una singola coordinata di texture; può essere visualizzata come un array di texel, come illustrato nella figura seguente.
La figura seguente mostra una trama 1D:
Ogni texel contiene un numero di componenti di colore a seconda del formato dei dati archiviati. Aggiungendo maggiore complessità, è possibile creare una trama 1D con livelli mipmap, come illustrato nella figura seguente.
Un livello mipmap è una texture che è di una potenza di due volte inferiore rispetto al livello sopra di esso. Il livello superiore contiene il maggior numero di dettagli, ogni livello successivo è più piccolo. Per un mipmap 1D, il livello più piccolo contiene un texel. Inoltre, i livelli MIP si riducono sempre fino a 1:1.
Quando vengono generate le mipmaps per una trama di dimensione dispari, il livello inferiore successivo è sempre di dimensione pari (tranne quando il livello più basso raggiunge 1). Ad esempio, il diagramma illustra una texture 5x1 il cui livello inferiore successivo è una texture 2x1, il cui livello mip successivo (e ultimo) è una texture 1x1. I livelli sono identificati da un indice denominato LOD (livello di dettaglio) usato per accedere alla trama più piccola quando si esegue il rendering della geometria che non è così vicina alla fotocamera.
matrici di trame 1D
Direct3D supporta anche matrici di trame. Una matrice di trame 1D è concettualmente simile alla figura seguente.
Questo array di texture contiene tre texture. Ognuna delle tre trame ha una larghezza di trama pari a 5 (ovvero il numero di elementi nel primo livello). Ogni trama contiene anche un mipmap a 3 livelli.
Tutte le matrici di trame in Direct3D sono una matrice omogenea di trame; ciò significa che ogni trama in una matrice di trame deve avere lo stesso formato e dimensioni dei dati (inclusa la larghezza della trama e il numero di livelli mipmap). È possibile creare matrici di trame di dimensioni diverse, purché tutte le trame in ogni matrice corrispondano in base alle dimensioni.
Trame 2D e matrici di trame 2D
Una risorsa Texture2D contiene una griglia 2D di texel. Ogni texel è indirizzabile da un vettore u, v. Poiché si tratta di una risorsa di texture, può contenere livelli mipmap e sottorisorse. Una risorsa di texture 2D completamente popolata è riportata nell'illustrazione seguente.
Questa risorsa di texture contiene una singola texture 3x5 con tre livelli di mipmap.
Una risorsa matrice di texture 2D è una matrice omogenea di texture 2D; ovvero, ogni texture ha lo stesso formato dei dati e dimensioni (inclusi i livelli mipmap). Ha un layout simile alla matrice di trame 1D, ad eccezione del fatto che le trame ora contengono dati 2D, come illustrato nella figura seguente.
Questo array di texture contiene tre texture, ognuna delle quali è di dimensioni 3x5 con due livelli mipmap.
Utilizzo di un array di texture 2D come texture cube
Un cubo di texture è una matrice di texture 2D che contiene 6 texture, una per ogni faccia del cubo. Un cubo di trama completamente popolato è simile alla figura seguente.
Una matrice di texture 2D che contiene 6 texture può essere letta all'interno degli shader con le funzioni intrinseche della mappa cubo, dopo essere stata associata alla pipeline con una vista a texture cubo. I cubi di trama vengono indirizzati dallo shader con un vettore 3D che punta dal centro del cubo di trama.
trame 3D
Una risorsa trama 3D (nota anche come trama volumetrica) contiene un volume 3D di texel. Poiché si tratta di una risorsa di texture, può contenere livelli mipmap. Una trama 3D completamente popolata è simile alla figura seguente.
Quando una slice mipmap di una texture 3D è collegata come output di target di rendering (con una vista target di rendering), la texture 3D si comporta in modo identico a un array di texture 2D con n slice. La sezione di rendering specifica viene scelta dalla fase geometry-shader.
Non esiste il concetto di un array di texture 3D; pertanto, una sottorisorsa di texture 3D è un singolo livello mipmap.
I sistemi di coordinate per Direct3D sono definiti per pixel e texel.
sistema di coordinate pixel
Il sistema di coordinate pixel in Direct3D definisce l'origine di un target di rendering nell'angolo superiore sinistro, come illustrato nel diagramma seguente. I centri pixel sono sfalsati di (0,5f, 0,5f) rispetto a posizioni intere.
Sistema di Coordinate Texel
Il sistema di coordinate texel ha l'origine nell'angolo superiore sinistro della trama, come illustrato nel diagramma seguente. In questo modo, il rendering delle texture allineate allo schermo diventa banale, poiché il sistema di coordinate dei pixel è allineato con quello dei texel.
Le coordinate delle trame sono rappresentate con un numero normalizzato o scalato; ogni coordinata della trama viene mappata a un texel specifico come indicato di seguito:
Per una coordinata normalizzata:
- Campionamento dei punti: Texel # = floor(U * Width)
- Campionamento lineare: Texel sinistro # = floor(U * Width), Texel destro # = Texel sinistro # + 1
Per una coordinata ridimensionata:
- Campionamento dei punti: Texel # = floor(U)
- Campionamento lineare: Numero Texel sinistro = floor(U - 0,5), Numero Texel destro = Numero Texel sinistro + 1
Dove la larghezza rappresenta la larghezza della texture (in texels).
Il wrapping degli indirizzi texture si verifica dopo il calcolo della posizione del texel.