A glimpse of city

index.js

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 requestAnimationFrame per continuare il loop di rendering.

Parametri:

  • time: Tempo attuale in millisecondi, passato automaticamente da requestAnimationFrame.

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.