Hello there. I imported .glb model created in Blender. Now I want to make many copies of the model using InstancedMesh
. There’s a method I follow to do that - I extract geometry and material from my model, then make BufferGeometry
and finally create a new Mesh
. At the end I apply instancing to newly created Mesh
. So it all seems standard procedure but the issue is that model doesn’t show up on the scene. I don’t have any errors, just no model on the scene. What’s wrong with my code or (maybe) model?
// DRACOLoader
const dracoLoader = new DRACOLoader();
dracoLoader.setDecoderPath('dracoDecoder/');
// GLTFLoader
const modelLoader = new GLTFLoader();
modelLoader.setDRACOLoader(dracoLoader);
modelLoader.load(
"regalFrontBottomNoMaterials.glb", (gltf) => {
const regal = gltf.scene.getObjectByName('regalMesh');
const meshes = [];
regal.traverse(function (mesh, index) {
if (mesh.geometry != undefined && mesh.geometry != null) {
meshes.push(mesh);
}
});
if (regal.name.includes('regalMesh') || (regal.userData.InstancedObjects != undefined && regal.userData.InstancedObjects != null)) {
var materials = [];
var geometries = [];
var mergedGeometry = new THREE.BufferGeometry();
var meshMaterial;
var mergedMesh;
meshes.forEach(function (mesh, index) {
mesh.updateMatrix();
var geo = mesh.geometry.clone().applyMatrix4(mesh.matrix);
geometries.push(geo);
meshMaterial = mesh.material.clone();
materials.push(meshMaterial);
});
try {
mergedGeometry = mergeBufferGeometries(geometries, true);
mergedGeometry.groupsNeedUpdate = true;
} catch (e) {
console.log(regal.name)
}
mergedMesh = new THREE.Mesh(mergedGeometry, materials);
var count = 2;
mergedMesh.geometry.center()
var instanceMesh = new THREE.InstancedMesh(mergedMesh.geometry, mergedMesh.material, count)
instanceMesh.name = regal.name;
instanceMesh.userData = regal.userData;
scene.add(instanceMesh)
}
console.log(mergedMesh)
},
// called while loading is progressing
function (xhr) {
console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
},
// called when loading has errors
function (error) {
console.log(error);
}
);
regalFrontBottomNoMaterials.glb (327.3 KB)