API

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.
variabledescription
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); //Implodes
newExplosion.explode(0); //Resets

Example 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);
Simple explosion Larger explosion
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);
});
});
}