Texture in DirectX Informatica Grafica
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Informatica Grafica Le Texture in DirectX
][ DirectX supporta le texture in numerosi punti
della sua Pipeline.
Texture in DirectX In particolare, le DirectX 8, possono supportare
fino a 8 texture diverse per generare i colori dei
pixel degli oggetti, attraverso i PixelShader
Ogni vertice, puo' quindi essere accompagnato
da fino ad 8 coordinate UV distinte (una per
texture).
Marco Gribaudo
marcog@di.unito.it
Le Texture in DirectX Le Texture in DirectX
Le texture devono essere salvate su disco in Per introdurre le texture, bisogna innanzi tutto modificiare
formato .bmp i formati dei vertici per includere le coordinate UV.
E' anche possibile caricare texture salvate in file
con formati differenti - ma e' decisamente piu'
complicato. In questo corso ci limiteremo a
trasformare eventuali formati grafici differenti in
.bmp utilizzando strumenti esterni (come ad es.
Photoshop).
Le Texture in DirectX Le Texture in DirectX
Di conseguenza anche le procedure per creare i vertici... ... ed il comando per impostare il formato di vertici
desiderato.
occorre scrivere 1-V, perche il sistema di coordinate
utilizzato dalle DirectX e' opposto rispetto a quello
adottato da Maya.Le Texture in DirectX Le Texture in DirectX
Si devono poi aggiungere le variabili in cui memorizzare la Si inserisce quindi il codice per caricare la texture nella
texture, e la libreria di supporto per poterla caricare. fase di inizializzazione dell'applicazione.
Set D3DX = New D3DX8
Set texture = D3DX.CreateTextureFromFileEx(D3DDevice, _
"texture.bmp", D3DX_DEFAULT, _
D3DX_DEFAULT, _
1, 0, D3DFMT_UNKNOWN, _
D3DPOOL_MANAGED, _
D3DX_FILTER_POINT, _
D3DX_FILTER_POINT, &HFF000000, _
ByVal 0, ByVal 0)
Le Texture in DirectX Le Texture in DirectX
Il nome tra virgolette, si riferisce al nome del file .bmp in E nel ciclo di rendering si aggiunge il comando per
cui e' contenuta la texture da caricare. associare la texture corretta all'oggetto che si sta per
disegnare.
Le Texture in DirectX Il filtraggio
Il colore delle superfici viene ottenuto moltiplicando il Nell'operazione di applicazione delle texture, le
colore della texture per quello del materiale. Per questo DirectX devono distorcere l'immagine in esse
all'oggetto e' stato associato un materiale di colore bianco.
contenuta.
In tale processo, alcuni colori devono essere
ricavati in base a quelli vicini.Il filtraggio Il filtraggio
Normalmente viene selezionato il texel piu' vicino alla Queto procedimento pero', rischia di creare immagini
posizione specificata dalla coordinata UV relativa al pixel spigolose e poco dettagliate.
che sta venendo disegnato.
Il filtraggio Il filtraggio
Per ovviare a questo problema le DirectX La formula piu' semplice e' l'interpolazione bilineare,
mettono a disposizione il filtraggio. attraverso la quale il colore di un texel viene determinato
miscelando opprotunamente i 4 texel effettivi piu' vicini.
Filtrare una texture, vuole dire applicare
opportune formule matematiche per
determinare tramite interpolazione i colori
intermedi dei texel, quando questi non
corrispondano esattamente con dei pixel.
Il filtraggio Le MIPmap
In DirectX e' possibile abilitare il filtraggio bilineare delle Sebbene il filtraggio migliori notevolmente la
texture con il seguente comando: qualita' delle texture, esso riduce pesantemente
le prestazioni. Inoltre esso non risolve i
problemi legati alla perdita di dettaglio durante
la riduzione di una immagine.
Per migliorare questa situazione sono state
introdotte le MIPmap.Le MIPmap Le MIPmap
Una MIPmap (multum in parvo) e' una sequenza di Una MIPmap occupa il 33% in piu' rispetto all'immagine
immagini rappresentanti la stessa figura, ognuna di semplice (per dimostrarlo basta immaginare di separare i
dimensione dimezzata rispetto alla precedente. canali dei colori rosso, verde e blu).
Le MIPmap Le MIPmap
Le copie rimpicciolite, vengono create automaticamente Per attivare le MIPmap nelle DirectX, occorre cambiare
nella fase di caricamento dell'immagine originale. leggermente il comando di caricamento della texture (in
modo da generare le copie rimpicciolite)...
Durante la mappatura dei triangoli sullo schermo, la
libreria grafica seleziona i Texel dall copia la cui
dimensione risulti piu' idonea alla distanza dall'ossrevatore
corrispondente.
Le MIPmap Esportare modelli
Ed aggiungere il seguente comando per abilitarne I modelli rappresentati fino ad ora, erano
l'utilizzo. sempre definiti specficando le caratteristiche di
vertici e spigoli direttamente in Visual Basic.
Sebbene la tecnica funzioni bene per modelli
molto piccoli, essa pone forti limitazioni
all'utilizzo di modelli piu' complessi.
Per risolvere questo problema, occorre poter
caricare modelli creati con software di grafica
3D tipo Maya o 3d studio.Esportare modelli Esportare modelli
Solitamente l'operazione di importazione dei Vi sono tre metodologie di importazione -
modelli si esegue salvando le geometrie su esportazione con le DirectX:
opportuni file.
Occorre quindi un filtro di esportazione sul Parsificazione di formati noti
software di modellazione, ed un filtro di Creazione di un formato proprietario
importazione nel programma che utilizza le Utilizzo del formato .x
DirectX.
Esportare modelli Esportare modelli
La parsificazione di formati noti consiste nella lettura diretta di La creazione di un formato proprietario consiste nel definre un
file salvati dagli applicativi di grafica (.3ds, .max, .ma, .mb) proprio modo di salvare i dati, e nello scrivere uno script
I vantaggi di tale tecnica risiedono nel fatto che si per il software (Maya, 3D studio, etc), ed una procedura di
possono importare tutte le caratteristiche che un software importazione in Visual Basic.
di modellazione e' in grado di specificare. La scrittura di tali moduli risulta notevolmente piu'
semplice che quella di un parsificatore di un formato noto.
Gli svantaggi sono due: la scrittura della componente Inoltre il cambiamento dello strumento di modellazione
Visual Basic capace di importare i file di una applicazione comporta la riscrittura solamente della componente di
e' decisamente complessa. Il lavoro viene legato esportazione.
fortemente ad una applicazione. Sostituire il programma
Lo svantaggio riesiede nel fatto che occorre comunque un
di modellazione puo' implicare la riscrittura del codice di
bravo programmatore per scrivere entrambe i moduli.
importazione.
Esportare modelli Esportare modelli
Le DirectX hanno definito un loro formato di In questo corso ricorreremo alla creazione di un
interscambio: il formato .x . Molti programmi di grafica formato proprietario.
hanno gia' incluse le funzionalita di esportazione in
formato .x, e le DirectX posseggono funzioni per leggerli
direttamente. Parsificazione di formati noti
Questo e' il modo piu' semplice per trasferire oggetti Creazione di un formato proprietario
grafici.
Utilizzo del formato .x
Esso pero' limita l'utilizzabilita' degli oggetti 3D ai soli
programmi scritti per le DirectX. Inoltre non consente di
esportare funzionalita' non supportate direttamente dalla
libreria stessa.Importare modelli Importare modelli
Prima di scrivere il codice per importare Gli oggetti visualizzati sono memorizzati attraverso
modelli, si deve definire il formato di TRIANGLE_LIST, in cui vertici vengono creati
attraverso la procedura MakeVertex (da noi definita)...
esportazione.
Il formato che adotteremo si ispirera'
direttamente al codice utilizzato fino ad ora.
Importare modelli Importare modelli
E gli spigoli specificati direttamente. In piu' occorre sapere quanti vertici e quanti spigoli
compongono la nostra figura.
Importare modelli Importare modelli
Il formato da noi utilizzato, salvera' quindi prima il Poi l'elenco dei vertici, uno per riga. Ogni riga conterra' le
numero di vertici e di spigoli che compongono la figura. informazioni relative alle posizioni x,y,z, alle normali
nx,ny,nz ed alle coordinate di mappatura u,v.Importare modelli Importare modelli
Quindi l'elenco degli spigoli, 3 per riga (in questo modo Per prima cosa dovremo definire le variabili che
ogni riga codifica un triangolo). memorizzano la geometria come variabili globali (quindi
fuori dall'evento OnLoad), ed aggiungerne due per
memorizzare il numero di vertici e di spigoli caricati.
Importare modelli Importare modelli
Quindi inseriremo la procedura per il caricamento del file:
Private Sub LoadObject(FileName As String) For T = 0 To TotI - 1 Step 3
Dim X, Y, Z, Nx, Ny, Nz, tU, tV As Single Input #1, I1, I2, I3 Inseriamo quindi il comando per richiamare la procedura
Dim I1, I2, I3 As Integer I(T) = I1 che carica il file contenente le informazioni dell'oggetto
TotV = 0 I(T + 1) = I2
TotI = 0 I(T + 2) = I3
esportato. Il nome tra parentesi indica il nome del file da
Next importare.
Open FileName For Input As #1 Close #1
Input #1, TotV, TotI End Sub
ReDim V(TotV), I(TotI)
For T = 0 To TotV - 1
Input #1, X, Y, Z, Nx, Ny, Nz, tU, tV
V(T) = MakeVertex(X, Y, Z, Nx, Ny, Nz, tU, tV)
Next
Importare modelli
Ed infine modificheremo il codice per visualizzare
l'oggetto, in modo che legga il numero di triangoli e di
vertici dalle variabili prima impostate.Puoi anche leggere