因此,我有一个数据库,其中包含文件引用列以及对其所需的子 STL 文件的任何引用。我可以将一两个模型加载到 THREE.js 查看器中,因此所有这些都可以正常工作,但是当我加载四个左右的数组时,事情开始变得毛茸茸的,分配的网格 ID 开始变得有点奇怪,并且多个网格得到相同的ID。因此,由于它适用于两个文件,我知道数组类型可以工作并且可以正确传递数据。
我想知道我的 loader.load 方法是否需要调整以等待网格加载和配置。否则我不知道我的问题是什么。
这里的第一部分调用我的 createMesh 函数并请求一个网格作为回报。正如我所说,这似乎一次适用于 1 或 2 个网格。
'if (indSTLCol.length>1 ){ for (item in indSTLCol){
getTheName="3dfiles\\"+fRSplit[parseInt(this.id)];
getTheName = getTheName.substring(0,getTheName.length-7);
getTheName=getTheName+indSTLCol[item]+".stl";
meshArr[item]=createMesh(getTheName);
}
}
else{
getTheName="3dfiles\\"+fRSplit[parseInt(this.id)];
console.log("in ind collection"+ getTheName);
console.log ("Added to Array"+meshArr[0].id);
meshArr[0]=createMesh(getTheName);
}
console.log("BREAK");
divId=this.id;
fSizeX=700;
fSizeY=500;
}'
This part creates the mesh:
'function createMesh(getTheName){
loader = new THREE.STLLoader();
loader.addEventListener( 'load', function ( event ) {
geometry = event.content;
mesh = new THREE.Mesh( geometry, material );
mesh.position.set( 0, 0, 0 );
mesh.rotation.set( - Math.PI / 2, 0, 0 );
mesh.scale.set( 2, 2, 2 );
mesh.castShadow = true;
mesh.receiveShadow = true;
mesh.id=getTheName;
scene.add(mesh);
/* for (a in scene.children){
console.log("Child Name "+ scene.children[a].id+" " + a);
} */
//console.log("Mesh ID# " + mesh.id+" Mesh info: " + mesh);
return mesh;
} );
mesh=loader.load( getTheName );
return mesh;
}'
我不擅长解释我的问题,所以如果您需要更多信息,请询问,我可以尽力解释得更好。
另外,我迭代了 scene.children 来检查 Id,它适用于两个及以下的网格。我开始相信,在创建几何图形之前,需要发生一些事情并分配 ID。
function createMeshArr(){
for (var a in scene.children){
if (scene.children[a] instanceof THREE.Mesh){
smeshArr[a]=scene.children[a];
}
}
return smeshArr;
好吧,这似乎有效,但不知道为什么:
function createMesh(getTheNames){
loader = new THREE.STLLoader();
mesh=loader.load( getTheNames);
loader.addEventListener( 'load', function ( event ) {
var material = new THREE.MeshLambertMaterial({color: 'blue' });
var geometry = event.content;
var mesh = new THREE.Mesh( geometry, material );
mesh.position.set( 0, 0, 0 );
mesh.rotation.set( - Math.PI / 2, 0, 0 );
mesh.scale.set( 2, 2, 2 );
mesh.castShadow = true;
mesh.receiveShadow = true;
mesh.id=getTheNames;
scene.add(mesh);
return mesh;
} );
return mesh;
}