Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La costruzione di un pianoforte nel mondo reale richiede molto tempo, abilità e materiali. Che ne dici di crearne uno per il mondo VR/AR?
In questa serie di esercitazioni si apprenderà come usare Babylon.js per creare un'app Web Realtà mista che contiene un pianoforte standup a 88 tasti funzionante nel mondo virtuale. Nell'app completata puoi teletrasportarti al pianoforte e suonare i tasti usando i controller di realtà mista.
In questa serie di esercitazioni si apprenderà come:
- Creare, posizionare e unire mesh per creare una tastiera per pianoforte
- Importare un modello Babylon.js di una cornice per pianoforte in piedi
- Aggiungere interazioni puntatore a ogni tasto del pianoforte
- Abilitare il teletrasporto e il supporto multipointer in WebXR
Prerequisiti
- Un computer connesso a Internet
- Informazioni di base su JavaScript
- Esercitazione sulla Hello World JavaScript di WebXR
- Browser supportato da WebXR, ad esempio Microsoft Edge
- Babylon.js 4.2 o versione successiva
- Qualsiasi visore VR o simulatore di Windows Mixed Reality
- Facoltativo: Windows 10 Creator Update se si vuole usare un simulatore di Windows Mixed Reality
Introduzione
Per iniziare, configurare la pagina Web HTML che conterrà la scena Babylon.js.
Creare una cartella denominata babylonjs-piano-tutorial e aprire la cartella in Visual Studio Code.
Nota
Anche se è possibile usare qualsiasi editor di codice per seguire questa procedura, visual Studio Code verrà usato per praticità in questa esercitazione.
All'interno della cartella creare un file denominato index.html e inserire il modello seguente nel file:
<html> <head> <title>Piano in BabylonJS</title> <script src="https://cdn.babylonjs.com/babylon.js"></script> <style> body,#renderCanvas { width: 100%; height: 100%;} </style> </head> <body> <canvas id="renderCanvas"></canvas> <script type="text/javascript"> const canvas = document.getElementById("renderCanvas"); const engine = new BABYLON.Engine(canvas, true); createScene(engine).then(sceneToRender => { engine.runRenderLoop(() => sceneToRender.render()); }); // Watch for browser/canvas resize events window.addEventListener("resize", function () { engine.resize(); }); </script> </body> </html>Per altre spiegazioni sul contenuto di questo modello, vedere l'esercitazione Hello World, che è un prerequisito di questa esercitazione.
Se si tenta di aprire questo file in un browser, nella console viene visualizzato un errore che indica che la
createScene()funzione non è stata trovata. Risolvere questo errore implementando la funzionecreateScene()nella sezione successiva.
Configurare la scena
Nella stessa cartella di index.htmlcreare un altro file denominato scene.js. Verrà archiviato tutto il codice javascript relativo alla configurazione della scena e alla creazione del pianoforte in questo file.
Aggiungere la
createScene()funzione in scene.js:const createScene = async function(engine) { const scene = new BABYLON.Scene(engine); return scene; }Si noti che stiamo creando
createScene()una funzione asincrona. Restate sintonizzati per scoprire perché.Successivamente, avremo bisogno di una luce e una fotocamera per rendere la scena visibile a noi. Aggiornare la
createScene()funzione:const createScene = async function(engine) { const scene = new BABYLON.Scene(engine); const alpha = 3*Math.PI/2; const beta = Math.PI/50; const radius = 220; const target = new BABYLON.Vector3(0, 0, 0); const camera = new BABYLON.ArcRotateCamera("Camera", alpha, beta, radius, target, scene); camera.attachControl(canvas, true); const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene); light.intensity = 0.6; return scene; }In questo caso, abbiamo creato un ArcRotateCamera, che punta quasi completamente verso il basso e punta al punto di origine dello spazio. La luce che abbiamo creato è una HemisphericLight che punta al cielo ed è utile per simulare uno spazio ambientale. Abbiamo anche attenuato leggermente la luce abbassandone l'intensità.
Se hai bisogno di un aggiornamento su come creare una fotocamera e una luce, rivisitare la sezione Preparare la scena della serie di esercitazioni Hello World prima di procedere al passaggio successivo.
Infine, poiché si sta sviluppando per una piattaforma WebXR, sarà necessario abilitare l'esperienza XR nella scena inserendo la riga seguente prima
return scene;di :const xrHelper = await scene.createDefaultXRExperienceAsync();In javascript, per usare la
awaitparola chiave in unaasyncfunzione all'interno di una funzione, anche la funzione padre deve essereasync, motivo per cui è stata definitacreateScenela funzione come asincrona in precedenza. Più avanti in questa serie di esercitazioni verrà usatoxrHelperper abilitare e configurare diverse funzionalità WebXR supportate da Babylon.js.Il scene.js completato dovrebbe essere simile al seguente:
const createScene = async function(engine) { const scene = new BABYLON.Scene(engine); const alpha = 3*Math.PI/2; const beta = Math.PI/50; const radius = 220; const target = new BABYLON.Vector3(0, 0, 0); const camera = new BABYLON.ArcRotateCamera("Camera", alpha, beta, radius, target, scene); camera.attachControl(canvas, true); const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene); light.intensity = 0.6; const xrHelper = await scene.createDefaultXRExperienceAsync(); return scene; }Ora che è disponibile una funzione funzionante
createScene(), è necessario caricareindex.html il file scene.js come script in modo che lacreateScene()funzione venga riconosciuta in index.html. Aggiungere questa riga di codice all'interno della<header>sezione del file HTML:<html> <head> <title>Piano in BabylonJS</title> <script src="https://cdn.babylonjs.com/babylon.js"></script> <script src="scene.js"></script> <style> body,#renderCanvas { width: 100%; height: 100%;} </style> </head> <body> <canvas id="renderCanvas"></canvas> <script type="text/javascript"> const canvas = document.getElementById("renderCanvas"); const engine = new BABYLON.Engine(canvas, true); createScene(engine).then(sceneToRender => { engine.runRenderLoop(() => sceneToRender.render()); }); // Watch for browser/canvas resize events window.addEventListener("resize", function () { engine.resize(); }); </script> </body> </html>Aprire index.html nel browser e si noterà che il messaggio di errore visualizzato in precedenza non è più presente e nella pagina è presente una scena Babylon.js vuota.