STL 加载和不正确的世界矩阵访问



对于我拥有的三.js项目,我遇到了一些问题,从STL加载顶点并将它们充分转换为世界坐标。矩阵似乎没有正确应用,我认为这可能与加载机制本身有关。

loader.load( './assets/models/trajan_print.stl', function ( geometry ) {
var mesh = new THREE.Mesh( geometry, material );
mesh.name = "target";
mesh.position.set( 0, - 300, - 400 );
mesh.rotation.set( - Math.PI / 2, 0, Math.PI );
mesh.scale.set( 5, 5, 5 );
//mesh.castShadow = true;
//mesh.receiveShadow = true;
mesh.visible = false;
SCENE.add( mesh );
model.setTargets(mesh);
} );

要注意的重要功能是最后一个。model.setTargets(mesh).我对世界坐标中物体的顶点感兴趣,这就是该函数的作用......有点:

setTargets(mesh){
this.matrixWorld = mesh.matrixWorld;  //THIS WORKS, PRINTING IT REVEALS VALUES TRANSLATION/SCALE/ROTATION THAT MATCH THE MODEL'S
var buffer = mesh.geometry.attributes.position.array;
for(var i = 0; i < buffer.length /3; i = i + 3){
var point = new THREE.Vector3(buffer[i], buffer[i+1],buffer[i+2]);
point.applyMatrix4(this.matrixWorld);//DOES NOT WORK
this.unassignedVertices.push(point);
}
}

现在,如果我在此功能之外执行完全相同的操作,它将按预期工作。只有当this.unassignedVertices时才调用这个,所以我解决了我需要等待异步加载发生的事实。

insertParticle(part) {
var point = this.unassignedVertices.pop();
point.applyMatrix4(this.matrixWorld); //THIS WORKS BUT HERE BUT WHY?
part.setTargetPoint(point);
this.octree.add(part);
this.particles.add(part);
}

第二个问题与setTargets(mesh)有关,我似乎只加载了大约一半的顶点mesh.geometry.attributes.position.array。现在这实际上可能是由代码中的其他部分引起的,我认为这超出了 SO 问题的范围,所以我的问题是该函数上是否有任何内容可以负责它?我是否加载不正确,是否转换错误,是否跳过了点?

至于进一步的上下文:如果我删除visible = false标签,模型加载并显示得很好。

好的,所以如果有人遇到这个问题。数组将具有重复的位置,因为并非所有位置都引用顶点(可能(。if(position.x == ...按照预期进行清理。

最新更新