Texture in DirectX Informatica Grafica

Pagina creata da Salvatore Piazza
 
CONTINUA A LEGGERE
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