- AI, insights & Innovazione
- 08.02.2023
Come fare un clone di Paint in HTML
Iniziamo una conversazione
100% 0% 5% 35% 100%
Three.js è una libreria javascript open source che permette la creazione di un ambiente 3D dinamico e leggero che può essere integrato in qualsiasi applicazione o sito web tramite canvas html. In sintesi: prestazioni e impatto finale migliorati grazie a una singola scelta.
Con Three.js si possono creare pannelli per visualizzare e interagire con oggetti 3D che possono essere sia una decorazione che la feature principale del contenuto che si sta visualizzando. Per esempio un oggetto 3D potrebbe fare da sfondo per dare movimento al resto del contenuto o essere il protagonista di una sezione, permettendo a un e-commerce di valorizzare i suoi prodotti da ogni prospettiva.
Portando all’estremo l’uso di Three.js è possibile creare veri e propri videogiochi o ambienti esplorabili interattivi, definibili anche come metaverso, in cui l’utente si può muovere e può interagire con tutti gli elementi grafici.
Three.js permette nativamente la creazione di forme tridimensionali di base, come cubi o sfere. Per ottenere forme più complesse è possibile importare file contenenti dei modelli 3D. Attualmente la tipologia migliore di file per questa operazione è il .glb, questo formato è la versione tradotta in binario del formato .gltf (Graphics Language Transmission Format) che è invece scritto in json e che è stato sviluppato con lo specifico intento di creare uno standard veloce e pratico per tutte applicazioni 3D che facilitasse lo sviluppo tecnologico dell’intera industria. È inoltre open source, il che rende possibile aggiungere estensioni per i vari bisogni dei singoli.
Un file.glb contiene tutte le informazioni necessarie a costruire un oggetto 3D insieme alle informazioni su materiali, texture e animazioni. Essendo un file binario non necessita di decodifica da parte della macchina che lo visualizza, così le informazioni passano direttamente dalla fonte alla scheda video e quindi allo schermo dell’utente, senza operazioni intermedie, ottimizzando al massimo le prestazioni.
Data la velocità di elaborazione e il peso ridotto, questo tipo di file è usato principalmente per la realizzazione di siti e applicativi web, videogiochi e software per visori VR/AR: tutti ambiti in cui il peso del file e il suo tempo di elaborazione sono fondamentali, sia per utilizzo di memoria che velocità di download in una risorsa online.
La creazione di un file.glb è supportata da tutti i principali software di progettazione 3D, che permettono di esportare i modelli dal formato nativo del software in uso direttamente in glb, per esempio in Blender è sufficiente dal menu andare su File > Export > glTF 2.0 (. glb/. gltf).
Durante l’esportazione è solitamente possibile specificare se salvare anche le animazioni e le trasformazioni o solo il modello statico. In generale è possibile avere tutte le animazioni desiderate associate ai singoli elementi che possono poi essere recuperate e attivate tramite codice, sia tutte insieme che singolarmente.

Per caricare un file.glb su three js è necessario importare il componente "GLTFLoader" , già presente di default nel codice di Three.js, che una volta inizializzato ci permette di caricare il file.glb e di lavorarci come se fosse un oggetto nativo di Three.js.
Una volta caricato infatti l’oggetto si presenta come un array che contiene tutti i singoli elementi 3D presenti nel file organizzati esattamente come nel software di progettazione usato per crearli, mantenendo gerarchia, nome e ordine. Ciò permette di selezionarli singolarmente nel caso siano necessarie ulteriori azioni sul singolo componente, come per esempio muoverlo o cambiarne il colore o la texture, fino a passarlo ad una funzione esterna che lo può gestire in maniera indipendente dal resto del contenuto del file.
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const loader = new GLTFLoader(manager);
let object, mixer;
loader.load( 'model/object.glb', function ( gltf ) {
object= gltf.scene;
object.traverse((obj) => {
if(obj.name == “lotrek”){
doSomething(obj);
}
});
mixer = new THREE.AnimationMixer( gltf.scene );
mixer.clipAction( gltf.animations[ 0 ] ).play();
}, undefined, function ( error ) {
console.error( error );
});
. . .
function animate() {
requestAnimationFrame( animate );
render();
. . .
};
clock = new THREE.Clock();
function render(){
delta = clock.getDelta();
mixer.update( delta );
}
Nel mio caso, ho installato Three.js tramite npm: installazioni diverse avranno un path di import differente. Per seguire questo esempio è sufficiente installare Three.js eseguendo il comando: “npm install three” nella root del progetto.
Object = gltf.scene; assegna alla variabile object (disponibile poi anche globalmente) il contenuto del file, la funzione .traverse(obj) permette poi di eseguire un ciclo nei singoli elementi consentendo di selezionarne uno in particolare e di trattarlo come un oggetto nativo di Threejs.
La variabile mixer serve invece come istanza dell’animazione associata al modello 3D, viene prima inizializzata quando si carica l’oggetto e in seguito, all’interno del ciclo di render, viene eseguita passandogli il tempo trascorso dall’ultima esecuzione, sfruttando il componente clock di Three.js tramite la funzione mixer.update( delta ); in modo che possa eseguire l’animazione con il giusto tempismo ad ogni aggiornamento di frame. Essendo codice javascript l’animazione può essere attivata e disattivata a runtime anche con un semplice “if” o con una gestione più complessa, per esempio in base a ciò che l’utente sta facendo in un dato momento.
Da notare come un singolo file.glb non deve per forza contenere un solo modello 3D ma può contenere anche un’intera scena composta da decine o centinaia di oggetti, comprese luci e camere (il nostro punto di vista sulla scena), che divengono poi comunque tutti selezionabili singolarmente una volta caricato il file, sta quindi allo sviluppatore in base alle sue necessità decidere se costruire il suo ambiente 3D posizionando gli oggetti tramite codice caricandoli singolarmente o crearlo per intero con l’uso di un software esterno per poi avere un oggetto unico.
Una volta caricati modelli e animazioni è possibile lavorare come si farebbe con oggetti nativi di Three.js per sviluppare e gestire la scena aggiungendo ciò che manca ai modelli 3D, cioè le interazioni con l’utente, spaziando da un semplice visualizzatore che ruota un oggetto seguendo il mouse fino al vero e proprio game design.
Qualche link utile per approfondire
Three.js
File .glb
File .gltf
Scopri di più
Idee Idee Idee
Come fare un clone di Paint in HTML
Game Design con Figma: anche questo si può fare
e-Commerce User Experience: ecco qualche consiglio