我是Three.js的新手,並且已經分配了嘗試修復偶爾出現的顯示爲壞的文件的法線任務。我們不知道它們是不好的掃描還是可能是不好的上傳。我們正在研究上傳功能,但如果可能的話,也想嘗試修復它們。任何人都可以提供任何想法或提示來修復文件或找到正確的法線?修復可能壞的.stl文件的法線。
下面是我們抓住法線和我們如何抓住它們的代碼。注意:此代碼通常工作正常,這只是法線不良時的問題。我還附加了其中一個文件,以便您可以查看正在處理的法線類型和「壞文件」。 Get File here
我們也在C++的後端使用VTK,所以使用這兩種方法的解決方案或想法都很有幫助。
my.geometry = geometry;
var front = new THREE.MeshPhongMaterial(
{color: 0xe2e4dc, shininess: 50, side: THREE.DoubleSide});
var mesh = [new THREE.Mesh(geometry, front)];
my.scene.add(mesh[0]);
my.objects.push(mesh[0]);
var rc = new THREE.Raycaster();
var modelData = {'objects': [mesh[0].id], 'id': mesh[0].id};
var normalFound = false;
for (var dy = 80; dy >= -80; dy = dy - 10) {
console.log('finding a normal on', 0, dy, -200);
rc.set(new THREE.Vector3(0, dy, -200), new THREE.Vector3(0, 0, 1));
var hit = rc.intersectObjects([mesh[0]]);
if (hit.length) {
my.normal = hit[0].face.normal.normalize();
console.log('normal', my.normal.z);
modelData['normal'] = my.normal;
if ((my.normal.z > 0.9 && my.normal.z < 1.1)) {
my.requireOrienteering = true;
modelData['arch'] = 'lower';
normalFound = true;
console.log('we have a lower arch');
} else if ((my.normal.z < -0.9 && my.normal.z > -1.1)) {
modelData['arch'] = 'upper';
normalFound = true;
console.log('we have an upper arch');
}
break;
}
}
我不確定它是如何完成的,但有很多現有的程序會爲您修復.stl文件。獲取其中一個源代碼並查看它,它可能會給你一些想法。 – Bernard