Babylon.js – Framework WebGl - Grafic3D

Transcript

Babylon.js – Framework WebGl - Grafic3D
Babylon.js – Framework WebGl
Tutorial step-by-step
Prima rappresentazione grafica
Indice
1. Download BabylonJS
2. Parte Web
3. Parte JavaScript
1.
2.
3.
4.
5.
6.
7.
8.
Babylon Engine
Creazione Scena
Oggetti
Camera
Light
Render Loop
Texture
Environment
4. Conclusione
5. Note
1. Download BabylonJS
BabylonJS è un framework JavaScript che permette di sviluppare Grafica Web 3D
basandosi sulle famose WebGl.
È possibile scaricare il framework direttamente da Github:
https://github.com/BabylonJS/Babylon.js
2. Parte Web
Prima di tutto bisogna creare una pagina base HTML5
alla quale verrà aggiunto:
• un Canvas, elemento base per il disegno della scena
• un po’ di CSS per estendere il Canvas alla massima dimensione.
2. Parte Web
Quindi, in definitiva la parte web complessiva è la seguente:
3. Parte JavaScript
Dopo aver definito la parte Web, passiamo alla parte grafica vera e propria.
Nell’ <head> della pagina html devono essere inseriti il file .js che contengono il
codice sorgente Babylon.
Dopo il </body>, devono essere inseriti gli elementi base di una scena Babylon.
• Babylon Engine
• Scene Object
• Camera
• Light
• Render Loop, per ottenere una scena in movimento
3.1. Babylon Engine
In BabylonJS tutto è controllato dall’engine: occorre quindi inizializzarlo all’interno
del canvas inserito nella pagina.
Il controllo ‘’if (!BABYLON.Engine.isSupported() )’’ , è utile per verificare eventuali
incompatibilità con il browser usato.
‘’Windows.alert’’ genera un messaggio di errore in caso di incompatibilità.
3.1. Babylon Engine
Occorre avviare il ciclo di rendering con engine.runRenderLoop() nel quale
verrà settata la funzione di rendering function () {scene.render();}
scene.render () si occupa del rendering della scena sulla quale sarà attivata
la camera.
Nella funzione assegnata a scene.beforeRender saranno inserite le istruzioni
eseguite prima dell’esecuzione del rendering della scena. In questo modo si
definise un Render Loop che sarà l’artefice del movimento degli oggetti inseriti
successivamente.
3.2. Creazione Scena
Dopo aver inizializzato l’Engine, è necessario creare una scena dove poter inserire
gli oggetti.
Il metodo BABYLON.Scene() prende come parametro l’oggetto engine e gli
associa una istanza della classe scene.
3.3. Oggetti
È arrivato il momento di inserire gli oggetti nella nostra scena.
Il primo oggetto ad essere inserito sarà una sfera.
La sfera inserita è definita con (‘’nome’’, segmenti, diametro, scena);
Viene anche assegnata una posizione con sfera1.position che nel nostro caso è
l’origine del sistema.
Analogamente possiamo definire un’altra sfera, posta ad una certa distanza dalla
prima e ‘collegata’ ad essa tramite un filo invisibile, tramite sfera2.parent = sfera1.
3.3. Oggetti
Infine inseriamo una terza sfera, collegata con sfera.position alla seconda sfera
creata.
Sfera3 è stata posizionata sull’ascissa 5 poiché sfera3.parent = sfera2 relaziona la
posizione di sfera3 rispetto a sfera2.
Ora le sfere sono create, ma per poterle vedere occorre inserire una camera.
3.4. Camera
Definiamo una BABYLON.ArcRotateCamera, adatta ad essere controllata con
mouse o tramite touch.
Questa camera ruota attorno ad un determinato perno.
Viene definita da (‘’nome’’, angolo lungo y, angolo lungo x, raggio, posizione, scena).
Per un migliore visualizzazione della scena, utilizziamo
scene.activeCamera.attachControl(canvas) che ci consente di selezionare la
camera attiva nella scena (visto che è possibile inserirne più di una) e di attaccarla
al canvas specificato. Questo consente di controllarla e visualizzarla.
3.5. Light
Per illuminare la scena Babylon mette a disposizione diversi tipi di luce.
Quella che sarà utilizzata in questo caso sarà la PointLight (luce a 360°).
Sono state inserite 4 PointLight definite da (‘’nome’’, posizione, scena).
Le coordinate della posizione sono state scelte in modo da posizionare le luce alle 4
coordinate di sfera1.
3.6. Render Loop
Inseriamo ora un movimento rotatorio lungo l’asse y di sfera1 e sfera2.
In scene.beforeRender abbiamo definito il movimento delle sfere che verrà
eseguito ad ogni ciclo di rendering.
Lo script completo della pagina
Scena ‘quasi’ completa
Adesso la nostra scena è completa e pronta per essere visualizzata sul browser.
La scena ottenuta è la seguente.
Guardalo QUI
3.7. Texture
Ma adesso, perché non abbellire e rendere più presentabile questa scena?
Si può fare mediante l’uso delle texture, immagini ‘’spalmate’’ sulle superfici degli oggetti.
Dichiariamo per ogni sfera un materiale tramite BABYLON.StandardMaterial indicato con
(‘’nome’’, scena).
Assegniamo ad ogni materiale una diffuseTexture tramite BABYLON.Texture definita da
(‘’nomefile.estensione’’, scena).
Il file della texture deve essere contenuto nella stessa cartella del file HTML.
Con specularPower viene definito l’intensità del riflesso della luce (più alto, meno riflesso).
3.7. Texture
La scena completa di texture è la seguente.
3.8.
Environment
Bvbcvbcvx<<x
L’ultima cosa che manca per avere un quadro completo della scena è un
environment, per ricreare lo spazio attorno agli oggetti creati.
Per prima cosa viene creato un cubo, che dovrà contenere gli oggetti, e
successivamente viene applicata una texture sul cubo stesso come fatto
precedentemente per gli altri oggetti, questa volta facendo attenzione a
disabilitare backFaceCulling.
La texture sarà formata da 6 immagini, poste in una apposita cartella denominata ‘skybox’ e
ogni immagine dovrà essere chiamata con il nome della rispettiva faccia del cubo:
“skybox_nx.png”,
“skybox_ny.png”,
“skybox_nz.png”,
“skybox_px.png”,
“skybox_py.png”,
“skybox_pz.png”.
4, Conclusione: Scena Completa
5. Note e Autori
Il tutorial completo di file può essere scaricato da
www.grafic3d.altervista.org
Nell’apposita sezione Tutorial
Maggio Jacopo
Tricarico Pasquale
Troisi Giovanni
Fine Presentazione