A glimpse of city

geometryUtils.js

Panoramica

Questo script fornisce un sistema di controllo per il movimento e la gestione della telecamera in un contesto 3D. Supporta l'interazione tramite tastiera, mouse, touch screen e gamepad, offrendo un'esperienza di controllo versatile su diverse piattaforme. Esso mappa i tasti e i pulsanti per movimenti e rotazioni della telecamera, gestisce lo zoom con la rotella del mouse e assicura che la telecamera rimanga all'interno di confini predefiniti. Inoltre, calcola i confini del percorso basandosi sui dati dei file OBJ e integra tutti gli input per aggiornare la posizione della telecamera in modo fluido e interattivo.

Funzioni

addTouchListeners(key)

Descrizione: Aggiunge i listener per gli eventi touch ai pulsanti per dispositivi mobili o touchscreen.

Funzionamento: Recupera l'elemento del pulsante tramite il suo ID e associa gli eventi touchstart e touchend per aggiornare lo stato dei tasti corrispondenti.

Parametri:

  • key (string) - Il tasto/ID del pulsante corrispondente nell'oggetto keys.

calculateObjBoundaries(objData)

Descrizione: Calcola i confini dell'oggetto Road basandosi sui dati di un file OBJ.

Funzionamento: Analizza i dati del file OBJ linea per linea, estraendo le coordinate X e Z per determinare i valori minimi e massimi, aggiornando così i confini della strada su cui l'utente si muove.

Parametri:

  • objData (string) - Dati del file OBJ contenenti le posizioni dei vertici.

isWithinRoadBoundaries(position)

Descrizione: Verifica se la posizione della telecamera è all'interno dei confini dell'oggetto Road.

Funzionamento: Confronta la posizione attuale della telecamera con i confini dell'oggetto Road precedentemente calcolati e determina se è all'interno di questi limiti.

Parametri:

  • position (array) - La posizione della telecamera nel formato array.

Ritorna:

  • boolean - Restituisce true se la posizione è all'interno dei confini, false altrimenti.

updateCameraPosition()

Descrizione: Aggiorna la posizione della telecamera basandosi sull'input dell'utente (tastiera, mouse, gamepad).

Funzionamento: Controlla gli input dell'utente tramite tastiera e gamepad per applicare movimenti e rotazioni alla telecamera. Verifica inoltre se la nuova posizione è all'interno dei confini del percorso prima di aggiornare la posizione effettiva della telecamera.

Gestione eventi

keydown

Descrizione: Evento che si attiva quando un tasto viene premuto sulla tastiera.

Funzionamento: Imposta il valore corrispondente in keys su true, avviando il movimento o la rotazione corrispondente della telecamera.

Parametri:

  • event di tipo KeyboardEvent.

keyup

Descrizione: Evento che si attiva quando un tasto viene rilasciato sulla tastiera.

Funzionamento: Imposta il valore corrispondente in keys su false, fermando il movimento o la rotazione corrispondente della telecamera.

Parametri:

  • event di tipo KeyboardEvent.

mousedown

Descrizione: Evento che si attiva quando un pulsante del mouse viene premuto.

Funzionamento: Attiva la modalità di rotazione della telecamera.

Parametri:

  • event di tipo MouseEvent.

mouseup

Descrizione: Evento che si attiva quando un pulsante del mouse viene rilasciato.

Funzionamento: Disattiva la modalità di rotazione della telecamera.

Parametri:

  • event di tipo MouseEvent.

mousemove

Descrizione: Evento che si attiva quando il mouse viene spostato.

Funzionamento: Aggiorna la rotazione della telecamera basandosi sul movimento del mouse.

Parametri:

  • event di tipo MouseEvent.

wheel

Descrizione: Evento che si attiva quando la rotellina del mouse viene utilizzata.

Funzionamento: Controlla lo zoom della telecamera. Se la telecamera si avvicina troppo o troppo poco, limita lo zoom per mantenerla entro i confini.

Parametri:

  • event di tipo WheelEvent.

touchstart

Descrizione: Evento che si attiva quando un'area designata dello schermo viene toccata.

Funzionamento: Simula la pressione di un tasto specifico, avviando il movimento corrispondente.

Parametri:

  • event di tipo TouchEvent.

touchend

Descrizione: Evento che si attiva quando un'area designata dello schermo viene rilasciata.

Funzionamento: Simula il rilascio di un tasto specifico, fermando il movimento corrispondente.

Parametri:

  • event di tipo TouchEvent.

Note

Gestione dei confini: Il codice è progettato per mantenere la telecamera entro i limiti della strada. Questo è particolarmente importante in ambienti virtuali in cui l'utente deve rimanere all'interno di un'area specifica.

Interazione con slider: Il codice prevede l'interazione con elementi UI, come slider, per evitare che queste interferiscano con i controlli della telecamera.

Input multipiattaforma: Lo script è progettato per funzionare su una varietà di dispositivi, supportando tastiere, mouse, touch screen e gamepad, rendendolo molto flessibile in contesti diversi.