Me deshice de toda mi pelusa para hacer este ejemplo y espero que te sea más fácil ayudarme.
https://decadent3d.s3.amazonaws.com/help1.html
https://decadent3d.s3.amazonaws.com/help2.html
La única diferencia entre los dos es que scene.add() está comentado.
Creo matrices de geometría, materiales y luego mallas. Todo se ve bien, la malla es malla. pero agregar a la escena es imposible. Espero que alguien pueda indicarme la dirección correcta.
captura_de_pantalla_de_inspeccionar
mejor, novato
Gracias a una respuesta de -Sammy a esta publicación... TRES.JS cargando una matriz de mallas STL
mi solución es un bloque de código mucho más pequeño, cada malla y material se agrega, se le asigna un nombre en secuencia y se empuja a matrices de malla y material.
gracias-sammy
const loader = new THREE.STLLoader(); const meshArray = []; const matArray = []; const fileList = ["https://decadentlab.s3.amazonaws.com/cases/001/Upper.stl", "https://decadentlab.s3.amazonaws.com/cases/001/Lower.stl", "https://decadentlab.s3.amazonaws.com/cases/001/Mockup.stl", "https://decadentlab.s3.amazonaws.com/cases/001/Ideal.stl" ]; var callback = function ( geometry ) { const matColors = ["0xE2D4B7", "0xAF9164", "0x437C90", "0x9EBC9E", "0xFCAB64", "0xAE8799", "0x496DDB", "0x717EC3", "0xC95D63", "0xF2AF29"]; var mats = new THREE.MeshPhongMaterial({ color: matColors[i], specular: 0x555555, shininess: 10 }); mats.side = THREE.DoubleSide; mats.transparent = true; mats.opacity = 1; mats.name = "material" + i; matArray.push( mats ); console.log( mats ); var mesh = new THREE.Mesh( geometry, mats ); mesh.position.set(0, 0, 0); mesh.rotation.set(5.5, 0, 0); mesh.name = "mesh" + i; meshArray.push(mesh); console.log( mesh ); scene.add( mesh ); i++; if (i < fileList.length) // put the next load in the callback loader.load( fileList[i], callback ) ; }; i = 0; loader.load( fileList[i], callback );