Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pelajari cara membuat objek dan interaksi 3D untuk pengalaman Mixed Reality menggunakan Babylon.js. Di bagian ini, Anda akan mulai dengan sesuatu yang sederhana, seperti melukis wajah kubus saat Memilih objek.
Tutorial ini membahas topik-topik berikut:
- Cara menambahkan interaksi
- Mengaktifkan mode imersif WebXR
- Jalankan aplikasi di simulator Windows Mixed Reality
- Menjalankan dan men-debug aplikasi di Chrome Android
Sebelum Anda mulai
Di langkah tutorial sebelumnya, halaman web dasar dengan adegan dibuat. Buka halaman web hosting untuk pengeditan.
<html>
<head>
<script src="https://cdn.babylonjs.com/babylon.js"></script>
<style>
body,#renderCanvas { width: 100%; height: 100%;}
</style>
</head>
<body>
<canvas id="renderCanvas"></canvas>
<script>
const canvas = document.getElementById("renderCanvas");
const engine = new BABYLON.Engine(canvas, true);
const createScene = function() {
const scene = new BABYLON.Scene(engine);
scene.clearColor = new BABYLON.Color3.Black;
const alpha = Math.PI/4;
const beta = Math.PI/3;
const radius = 8;
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(1, 1, 0));
const box = BABYLON.MeshBuilder.CreateBox("box", {});
box.position.x = 0.5;
box.position.y = 1;
return scene;
};
const sceneToRender = createScene();
engine.runRenderLoop(function(){
sceneToRender.render();
});
</script>
</body>
</html>
Menambahkan interaksi
Pertama, mari kita perbarui kode kita yang membuat kubus, sehingga kubus dicat dengan warna acak. Untuk melakukan itu, kita akan menambahkan bahan ke kubus kita. Bahan memungkinkan kita untuk menentukan warna dan tekstur dan dapat digunakan untuk menutupi objek lain. Bagaimana bahan muncul tergantung pada cahaya atau lampu yang digunakan dalam adegan dan bagaimana bahan diatur untuk bereaksi. Misalnya, diffuseColor menyebarkan warna ke seluruh jala tempatnya terpasang. Tambahkan kode berikut:
const boxMaterial = new BABYLON.StandardMaterial("material", scene); boxMaterial.diffuseColor = BABYLON.Color3.Random(); box.material = boxMaterial;Sekarang setelah kubus dicat dengan warna acak, mari kita tambahkan interaksi ke:
- Ubah warna saat kubus diklik
- Memindahkan kubus setelah warna diubah
Untuk menambahkan interaksi, kita harus menggunakan tindakan. Tindakan diluncurkan sebagai respons terhadap pemicu peristiwa. Misalnya, ketika pengguna mengklik kubus. Yang perlu kita lakukan adalah membuat instans BABYLON. ActionManager dan daftarkan tindakan untuk pemicu tertentu. BABYLON. ExecuteCodeAction akan menjalankan fungsi JavaScript kami ketika seseorang mengklik kubus:
box.actionManager = new BABYLON.ActionManager(scene); box.actionManager.registerAction(new BABYLON.ExecuteCodeAction( BABYLON.ActionManager.OnPickTrigger, function (evt) { const sourceBox = evt.meshUnderPointer; //move the box upright sourceBox.position.x += 0.1; sourceBox.position.y += 0.1; //update the color boxMaterial.diffuseColor = BABYLON.Color3.Random(); }));Kode akhir halaman web akan terlihat sebagai berikut:
<html> <head> <script src="https://cdn.babylonjs.com/babylon.js"></script> <style> body,#renderCanvas { width: 100%; height: 100%;} </style> </head> <body> <canvas id="renderCanvas"></canvas> <script> const canvas = document.getElementById("renderCanvas"); const engine = new BABYLON.Engine(canvas, true); const createScene = function() { const scene = new BABYLON.Scene(engine); scene.clearColor = new BABYLON.Color3.Black; const alpha = Math.PI/4; const beta = Math.PI/3; const radius = 8; 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(1, 1, 0)); const box = BABYLON.MeshBuilder.CreateBox("box", {}); box.position.x = 0.5; box.position.y = 1; const boxMaterial = new BABYLON.StandardMaterial("material", scene); boxMaterial.diffuseColor = BABYLON.Color3.Random(); box.material = boxMaterial; box.actionManager = new BABYLON.ActionManager(scene); box.actionManager.registerAction( new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickTrigger, function (evt) { const sourceBox = evt.meshUnderPointer; sourceBox.position.x += 0.1; sourceBox.position.y += 0.1; boxMaterial.diffuseColor = BABYLON.Color3.Random(); })); return scene; }; const sceneToRender = createScene(); engine.runRenderLoop(function(){ sceneToRender.render(); }); </script> </body> </html>
Mengaktifkan pengalaman imersif WebXR
Sekarang kubus kita berubah warna, kita siap untuk mencoba pengalaman imersif.
Dalam langkah ini kita akan memperkenalkan tanah. Kubus akan menggantung di udara dan kita akan melihat lantai di bagian bawah. Tambahkan tanah sebagai berikut:
const ground = BABYLON.MeshBuilder.CreateGround("ground", {width: 4, height: 4});Ini menciptakan lantai 4x4 meter sederhana.
Untuk menambahkan dukungan WebXR, kita perlu memanggil createDefaultXRExperienceAsync, yang memiliki hasil Promise . Tambahkan kode ini di akhir fungsi createScene alih-alih adegan pengembalian;:
const xrPromise = scene.createDefaultXRExperienceAsync({ floorMeshes: [ground] }); return xrPromise.then((xrExperience) => { console.log("Done, WebXR is enabled."); return scene; });Karena fungsi createScene sekarang mengembalikan janji alih-alih adegan, kita perlu memodifikasi bagaimana createScene dan engine.runRenderLoop dipanggil. Ganti panggilan saat ini dari fungsi-fungsi ini, yang terletak tepat sebelum <tag /script> , dengan kode di bawah ini:
createScene().then(sceneToRender => { engine.runRenderLoop(() => sceneToRender.render()); });Kode akhir halaman web akan terlihat sebagai berikut:
<html> <head> <script src="https://cdn.babylonjs.com/babylon.js"></script> <style> body,#renderCanvas { width: 100%; height: 100%;} </style> </head> <body> <canvas id="renderCanvas"></canvas> <script> const canvas = document.getElementById("renderCanvas"); const engine = new BABYLON.Engine(canvas, true); const createScene = function() { const scene = new BABYLON.Scene(engine); scene.clearColor = new BABYLON.Color3.Black; const alpha = Math.PI/4; const beta = Math.PI/3; const radius = 8; 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(1, 1, 0)); const box = BABYLON.MeshBuilder.CreateBox("box", {}); box.position.x = 0.5; box.position.y = 1; const boxMaterial = new BABYLON.StandardMaterial("material", scene); boxMaterial.diffuseColor = BABYLON.Color3.Random(); box.material = boxMaterial; box.actionManager = new BABYLON.ActionManager(scene); box.actionManager.registerAction( new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickTrigger, function (evt) { const sourceBox = evt.meshUnderPointer; sourceBox.position.x += 0.1; sourceBox.position.y += 0.1; boxMaterial.diffuseColor = BABYLON.Color3.Random(); })); const ground = BABYLON.MeshBuilder.CreateGround("ground", {width: 4, height: 4}); const xrPromise = scene.createDefaultXRExperienceAsync({ floorMeshes: [ground] }); return xrPromise.then((xrExperience) => { console.log("Done, WebXR is enabled."); return scene; }); }; createScene().then(sceneToRender => { engine.runRenderLoop(() => sceneToRender.render()); }); </script> </body> </html>Kode di atas menghasilkan output berikut di jendela browser:

Berjalan di Simulator Windows Mixed Reality
Aktifkan simulator Windows Mixed Reality jika Anda belum melakukannya di masa lalu.
Pilih tombol Immersive-VR di sudut kanan bawah:

Tindakan ini akan meluncurkan jendela Simulator Windows Mixed Reality seperti yang ditunjukkan di bawah ini:

Gunakan tombol W,A,S, dan D pada keyboard Anda untuk berjalan maju, kembali ke kiri dan kanan yang sesuai. Gunakan tangan yang disimulasikan untuk menargetkan kubus dan tekan tombol Enter pada keyboard Anda untuk melakukan tindakan klik. Kubus akan mengubah warnanya dan pindah ke posisi baru.
Catatan
Saat menargetkan kubus, pastikan bahwa akhir sinar tangan (lingkaran putih) berpotongan dengan kubus seperti yang ditunjukkan pada gambar di atas. Pelajari selengkapnya tentang Titik dan berkomitmen dengan tangan.
Menjalankan dan men-debug di perangkat Android
Lakukan langkah-langkah berikut untuk mengaktifkan penelusuran kesalahan di perangkat Android Anda:
Prasyarat
Server web yang melayani halaman html statis dalam konteks aman (https:// atau melalui Penerusan port di localhost) pada komputer pengembangan. Misalnya leverage melayani paket npm sebagai server web ringan sederhana yang melayani file html statis, periksa lebih banyak layanan npm
Perangkat awalnya dikirim dengan Google Play Store dan harus menjalankan Android 7.0 atau yang lebih baru
Versi terbaru Google Chrome di stasiun kerja pengembangan dan di perangkat
Untuk memverifikasi bahwa perangkat dikonfigurasi dengan benar untuk menjalankan WebXR, telusuri ke halaman WebXR sampel pada perangkat. Anda akan melihat pesan, seperti:
Browser Anda mendukung WebXR dan dapat menjalankan pengalaman Realitas Virtual dan Realitas Teraugmentasi jika Anda memiliki perangkat keras yang sesuai.
Aktifkan mode pengembang dan penelusuran kesalahan USB di perangkat Android. Lihat cara melakukan ini untuk versi Android Anda di halaman dokumentasi resmi Mengonfigurasi opsi pengembang di perangkat
Selanjutnya, sambungkan perangkat Android ke mesin pengembangan atau laptop Anda melalui kabel USB
Pastikan bahwa server web pada komputer pengembangan sedang berjalan. Misalnya, navigasikan ke folder akar yang berisi halaman hosting web Anda (index.html) dan jalankan kode berikut (dengan asumsi Anda menggunakan paket npm sajikan):
serveBuka Google Chrome di komputer pengembangan Anda dan masukkan di bilah alamat teks berikut:
chrome://inspect#devices

Pastikan kotak centang Temukan perangkat USB diaktifkan
Klik tombol Penerusan port dan pastikan bahwa Penerusan port diaktifkan dan berisi entri localhost:5000 seperti yang ditunjukkan di bawah ini:

Di perangkat Android yang terhubung, buka jendela Google Chrome dan telusuri http://localhost:5000 dan Anda akan melihat kubus
Di komputer pengembangan, di Chrome, Anda akan melihat perangkat dan daftar halaman web yang saat ini dibuka di sana:

Klik tombol Periksa di samping entri http://localhost:5000:

Menggunakan Chrome DevTools untuk men-debug halaman
Poin-poin penting
Berikut ini adalah takeaways terpenting dari tutorial ini:
- Babylon.js memudahkan untuk membuat pengalaman imersif menggunakan JavaScript
- Untuk membuat adegan virtual, Anda tidak perlu menulis kode tingkat rendah atau mempelajari teknologi baru
- Anda dapat membangun aplikasi Mixed Reality dengan browser yang didukung WebXR tanpa perlu membeli headset
Langkah berikutnya
Selamat! Anda telah menyelesaikan serangkaian tutorial Babylon.js kami dan mempelajari cara:
- Menyiapkan lingkungan pengembangan
- Membuat halaman web baru untuk menampilkan hasil
- API Babylon.js untuk membuat dan berinteraksi dengan elemen 3D dasar
- Menjalankan dan menguji aplikasi di simulator Windows Mixed Reality
Untuk informasi selengkapnya tentang pengembangan Mixed Reality JavaScript, lihat Gambaran umum pengembangan JavaScript.
Jika Anda mencari tutorial Babylon.js lain, lihat Seri Tutorial pembuatan Piano untuk mempelajari cara membangun piano di ruang VR menggunakan Babylon.js.