JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://rawgithub.com/BabylonJS/Babylon.js/master/babylon.1.11.js"></script>
<canvas id="renderCanvas"></canvas>
CSS
html, body, div, canvas {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
JavaScript
BABYLON.Mesh.prototype._setVerticesDataByMerging = function (meshesToMerge, kind, doNotDeleteAfterMerging) {
if (!(meshesToMerge instanceof Array))
meshesToMerge = [meshesToMerge];
var vertices = [];
var indices = [];
// Indices are only useful for positions.
if (kind === BABYLON.VertexBuffer.PositionKind)
indices = this.getIndices();
// Calculate center of all meshes merged to know the final center,
// thus we'll transform all vertices position into the new center space.
var center = this.position;
// Use to know how many times the current mesh (this) appear in meshToMerge.
var currentMeshApparition = 0;
for (var i in meshesToMerge) {
var meshToMerge = meshesToMerge[i];
if (meshToMerge === this && meshToMerge.id === this.id) {
++currentMeshApparition;
// Trying to merge with itself.
continue;
}
center = center.add(meshToMerge.getAbsolutePosition());
}
// We substract the number of apparition because we do not need to merge the mesh with itself.
// +1 because "this" is not in meshesToMerge array.
var meshesCount = meshesToMerge.length - currentMeshApparition + 1;
if (meshesCount > 0)
center = center.scale(1 / meshesCount);
// transformMatrixCenter to convert all vertices of each mershToMerge in center space.
var transformMatrixCenter = BABYLON.Matrix.Translation(center.x, center.y, center.z);
transformMatrixCenter.invert();
var meshParent = this.parent;
var parentWorldMatrixInv;
if (meshParent) {
parentWorldMatrixInv = meshParent.getWorldMatrix().clone();
parentWorldMatrixInv.invert();
}
var meshTransformMatrix;
if (kind === BABYLON.VertexBuffer.PositionKind
|| kind === BABYLON.VertexBuffer.NormalKind) {
meshTransformMatrix = this._localWorld.multiply(transformMatrixCenter);
...