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