Panoramica
Questo file contiene una serie di funzioni JavaScript per analizzare e gestire modelli 3D informato OBJ e MTL, rendendoli compatibili con WebGL per il rendering. Le funzioni includono il parsing di file MTL per estrarre proprietà dei materiali (come colore, texture, trasparenza), e di file OBJ per gestire geometrie 3D, vertici, texture e normali. Inoltre, il file prevede la configurazione di texture e materiali di default, calcola le dimensioni del modello per il posizionamento nello spazio 3D e integra le geometrie con i materiali associati per consentire un rendering corretto ed efficiente in WebGL.
Funzioni
parseMapArgs(unparsedArgs)
Descrizione: Gestisce e analizza gli argomenti non elaborati delle mappe di texture.
Funzionamento:
Questa funzione si occupa della gestione e dell'analisi degli argomenti per le mappe di texture. Al momento, non implementa opzioni avanzate di parsing e restituisce direttamente gli argomenti non elaborati.Parametri:
unparsedArgs (Array):Gli argomenti non elaborati relativi alla mappa di texture.
Ritorna:
Array:Gli argomenti non elaborati per le mappe di texture.
parseMTL(text)
Descrizione: Analizza il contenuto di un file MTL (Material Template Library) e restituisce un oggetto con le informazioni sui materiali definiti.
Funzionamento: Questa funzione legge e analizza il testo di un file MTL, che definisce i materiali e le loro proprietà. Utilizza una serie di parole chiave per determinare le proprietà del materiale, come il colore ambientale, il colore diffuso, la mappa di texture e altri attributi. I materiali vengono memorizzati in un oggetto, utilizzando i nomi dei materiali come chiavi.
Parametri:
text (String):Il contenuto del file MTL da analizzare.
Ritorna:
Object:Un oggetto che mappa i nomi dei materiali alle loro proprietà, inclusi colori, texture e altre impostazioni.
parseOBJ(text)
Descrizione: Analizza il contenuto di un file OBJ e restituisce una struttura con le geometrie e le librerie di materiali associate.
Funzionamento: Questa funzione legge e analizza il testo di un file OBJ, che definisce la geometria e i materiali di un modello 3D. Estrae le informazioni sui vertici, le coordinate delle texture, le normali e i colori. I dati vengono organizzati in strutture WebGL e le geometrie vengono suddivise in parti con le rispettive informazioni sui materiali.
Parametri:
text (String):Il contenuto del file OBJ da analizzare.
Ritorna:
Object:Un oggetto contenente due proprietà:geometries (Array):Un array di oggetti che rappresentano le geometrie, ciascuna associata a un materiale e ai dati di vertice.materialLibs (Array):Un array di percorsi a file MTL associati al file OBJ.
setUpDefaultTexture(gl)
Descrizione: Imposta le texture predefinite in un contesto WebGL.
Funzionamento: Questa funzione crea e assegna texture predefinite utilizzate come valori di default quando non sono specificate altre texture. Le texture predefinite includono una texture bianca e una mappa normale predefinita. Inoltre, viene creato un materiale predefinito con proprietà base.
Parametri:
gl (WebGLRenderingContext):Il contesto WebGL nel quale le texture verranno create.
getExtents(positions)
Descrizione: Calcola gli estremi di una serie di posizioni nel sistema di coordinate 3D.
Funzionamento: Questa funzione determina i valori minimi e massimi delle coordinate di un insieme di posizioni 3D. Viene utilizzata per calcolare l'area di bounding di un modello o una scena.
Parametri:
positions (Array):Un array di coordinate 3D.
Ritorna:
Object:Un oggetto contenente due proprietà:min (Array):Il vettore che rappresenta i valori minimi delle coordinate.max (Array):Il vettore che rappresenta i valori massimi delle coordinate.
getGeometriesExtents(geometries)
Descrizione: Calcola gli estremi complessivi di tutte le geometrie fornite.
Funzionamento: Questa funzione utilizza getExtents per
determinare gli estremi globali (minimi e massimi) di tutte le geometrie in un array.
Aggrega i risultati per trovare i limiti complessivi di tutte le geometrie.
Parametri:
geometries (Array):Un array di oggetti di geometria, ciascuno contenente dati di posizione.
Ritorna:
Object:Un oggetto contenente due proprietà:min (Array):Il vettore che rappresenta i valori minimi globali delle coordinate.max (Array):Il vettore che rappresenta i valori massimi globali delle coordinate.
loadObj(gl, objHref)
Descrizione: Carica e processa un file OBJ in un contesto WebGL, inclusi i materiali e le texture.
Funzionamento: Questa funzione esegue il caricamento asincrono di un file OBJ e dei suoi materiali associati. Analizza il file OBJ e i file MTL correlati, crea texture se necessario e prepara le informazioni di rendering per WebGL. Modifica i materiali per evidenziare le mappe speculari.
Parametri:
gl (WebGLRenderingContext):Il contesto WebGL utilizzato per creare e gestire le texture e i buffer.objHref (String):Il percorso del file OBJ da caricare.
Ritorna:
Array:Un array di oggetti che rappresentano le parti renderizzabili del modello 3D, ciascuno contenente informazioni sui materiali e i buffer WebGL.
Note
- Integrazione Materiali e Texture:
I materiali e le texture sono strettamente legati alle geometrie tramite l'uso delle librerie materiali specificate nel file OBJ (
mtllib). Un aspetto notevole è il caricamento asincrono delle texture, che utilizza la funzionecreateTextureper garantire che ogni texture sia caricata prima di essere associata al materiale, migliorando l'efficienza del rendering. Inoltre, la possibilità di esagerare la mappa speculare modificando la lucentezza e il colore speculare offre una flessibilità visiva significativa. - Set Up delle Texture di Default:
La funzione
setUpDefaultTexturecrea texture di default per assicurare che il rendering sia comunque possibile in assenza di texture specifiche nel file OBJ/MTL. Questo è particolarmente utile per gestire casi in cui i file siano incompleti o manchino di texture, evitando errori di rendering e garantendo un fallback sicuro. - Ottimizzazione per WebGL:
Il codice è ottimizzato per l'integrazione con WebGL. L’uso della funzione
webglUtils.createBufferInfoFromArrayspermette di generare buffer direttamente dai dati estratti dai file OBJ. Questo approccio non solo semplifica il codice, ma migliora anche le prestazioni del rendering, poiché minimizza la quantità di trasformazioni necessarie per passare dai dati del modello ai buffer WebGL. - Gestione Asincrona del Caricamento:
La funzione
loadObjutilizza operazioni asincrone (async/await) per caricare file OBJ e MTL, gestendo le dipendenze tra i file in modo efficiente. L'uso diPromise.allper caricare più librerie di materiali contemporaneamente è un dettaglio importante che migliora la velocità di caricamento e garantisce che tutte le risorse siano disponibili prima del rendering.