Panoramica
Questo script utilizza WebGL per caricare e visualizzare una scena 3D composta da vari modelli OBJ, come auto, edifici, alberi, e altro. La scena è interattiva, permettendo all'utente di modificare la direzione della luce tramite dei controlli dell'interfaccia utente (slider). Il codice è strutturato per essere modulare e facilmente estensibile, con funzioni separate per gestire il caricamento dei modelli, l'aggiornamento della posizione della telecamera, e il rendering della scena. Viene utilizzata la libreria m4 per le operazioni di matrice e vettore, e webglUtils per semplificare l'uso delle API WebGL.
Funzioni
main()
Descrizione: Funzione principale che inizializza e avvia il processo di rendering WebGL.
Funzionamento:
- Verifica la disponibilità del contesto WebGL.
- Visualizza un modal di caricamento durante il caricamento degli asset.
- Imposta texture e shader per il rendering.
- Carica modelli 3D da file OBJ in modo asincrono.
- Avvia il loop di rendering chiamando
render()ricorsivamente.
updateLightDirection()
Descrizione: Aggiorna la direzione della luce in base ai valori dei controlli dell'interfaccia utente.
Funzionamento:
- Recupera i valori dagli slider (x, y, z) che controllano la direzione della luce.
- Normalizza il vettore della direzione della luce con i nuovi valori.
- Aggiorna la visualizzazione dei valori attuali nell'interfaccia utente.
render(time)
Descrizione: Funzione di rendering che viene chiamata in loop per disegnare la scena 3D.
Funzionamento:
- Aggiorna la posizione della telecamera.
- Ridimensiona il canvas in base alle dimensioni della finestra.
- Imposta i parametri di rendering come la proiezione e la vista.
- Configura e applica le uniformi condivise per tutte le mesh.
- Esegue il rendering di ciascun modello 3D nella scena.
- Richiama
requestAnimationFrameper continuare il loop di rendering.
Parametri:
time: Tempo attuale in millisecondi, passato automaticamente darequestAnimationFrame.
renderModel(model)
Descrizione: Funzione di supporto per il rendering di un singolo modello 3D.
Funzionamento:
- Per ogni parte del modello, imposta i buffer e gli attributi WebGL.
- Applica la matrice del mondo e uniformi specifiche del materiale.
- Disegna la parte corrente del modello.
Parametri:
model: Il modello 3D da renderizzare.
setUpDefaultTexture(gl)
Descrizione: Inizializza le texture predefinite.
Funzionamento:
- Configura texture bianche e normali predefinite da utilizzare nei materiali dei modelli.
Parametri:
gl: Il contesto WebGL.
Note
- Scalabilità e Manutenzione: La struttura modulare del codice è progettata per facilitare l'aggiunta di nuovi modelli e caratteristiche senza dover riscrivere il codice esistente. L'aumento della complessità della scena o l'aggiunta di nuovi modelli, determina una necessità di mantenere il codice ben organizzato e documentato.