Exploding Meshes
How To Use MeshExploder
MeshExploder takes an array of meshes and increases or decreases their distance from a center Mesh.
import { MeshExploder } from "@babylonjs/core/Misc/meshExploder";const newExplosion = new MeshExploder(meshes, centerMesh);newExplosion.explode(); //Explodes meshes away from center. Default 1.0.| variable | description |
|---|---|
| meshes | The array of meshes to explode/implode. |
| centerMesh (optional) | The mesh to be the center of the explosion. Defaults to the mesh closest to the center of all meshes. |
The MeshExploder.explode() function takes a numeric parameter to multiply the explosion distance. Negative numbers implode. Zero resets the meshes to their original positions.
newExplosion.explode(-2); //ImplodesnewExplosion.explode(0); //ResetsExample Usage
import { MeshBuilder } from "@babylonjs/core/Meshes/meshBuilder";import { MeshExploder } from "@babylonjs/core/Misc/meshExploder";const toExplodeArray = [];const sphere1 = MeshBuilder.CreateSphere("sphere1", { segments: 12, diameter: 2 }, scene);sphere1.position.y += 2;toExplodeArray.push(sphere1);for (let alpha = 0; alpha < Math.PI * 2; alpha += Math.PI / 10) { const sphere0 = MeshBuilder.CreateSphere("sphere0", { segments: 8, diameter: 0.5 }, scene); sphere0.position.y = 2; sphere0.position.z = Math.cos(alpha) * 1.25; sphere0.position.x = Math.sin(alpha) * 1.25; toExplodeArray.push(sphere0);}const newExplosion = new MeshExploder(toExplodeArray);newExplosion.explode(2);import { AssetsManager } from "@babylonjs/core/Misc/assetsManager";import { MeshExploder } from "@babylonjs/core/Misc/meshExploder";const assetsManager = new AssetsManager(scene);const meshTask = assetsManager.addMeshTask("model", "", "./", "model.gltf");let meshes;meshTask.onSuccess = function (task) { meshes = task.loadedMeshes;};assetsManager.load();const newExplosion;scene.executeWhenReady(function () { newExplosion = new MeshExploder(meshes); newExplosion.explode(2);});Example Using the Babylon.js Viewer
import { MeshExploder } from "@babylonjs/core/Misc/meshExploder";BabylonViewer.viewerManager.getViewerPromiseById("babylon-viewer").then(function (viewer) { viewerObservables(viewer);});let newExplosion;function viewerObservables(viewer) { viewer.onModelLoadedObservable.add(function (model) { model.rootMesh.getScene().executeWhenReady(function () { newExplosion = new MeshExploder(model.meshes, model.meshes[0]); newExplosion.explode(2); }); });}