使用STLLoader进行CSG操作

时间:2013-12-16 01:17:34

标签: javascript three.js stl-format

我正在尝试使用ThreeCSG.js对导入的STL网格文件执行布尔操作。 这是代码..

function openFile() {
filePath = document.form.selectedFile.value;
var loader = new THREE.STLLoader();
loader.addEventListener('load', function(event) {
//A simple cube geometry imported from STL file.

var geometry = event.content;
var cube_mesh = new THREE.Mesh(geometry);
cube_mesh.position.x = -7;
var cube_bsp = new ThreeBSP(cube_mesh);
//Create a sphere
var sphere_geometry = new THREE.SphereGeometry(1.8, 32, 32);
var sphere_mesh = new THREE.Mesh(sphere_geometry);
sphere_mesh.position.x = -7;
var sphere_bsp = new ThreeBSP(sphere_mesh);
//subtract cube from sphere
var subtract_bsp = cube_bsp.subtract(sphere_bsp);
var result = subtract_bsp.toMesh(new THREE.MeshLambertMaterial({shading:  THREE.SmoothShading, map: THREE.ImageUtils.loadTexture('texture.png')}));
result.geometry.computeVertexNormals();
scene.add(result);

});
loader.load(filePath);
}

但它似乎不起作用。我正在使用three.js R62并使用STLLoader.js导入STL文件。

我刚开始学习Three.js,并不完全确定ThreeCSG.js是否支持导入的网格文件。但是,在理论上,CSG操作应该对导入的网格文件起作用,因为它们处理程序中创建的网格几何。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

好的,我自己想出了答案。对于任何初学者都是three.js的人来说,了解UVs纹理映射的概念非常重要。见http://wiki.blender.org/index.php/Doc:2.6/Manual/Textures/Mapping/UV。现在,没有UV协议。在STL文件中可用,因此许多three.js函数不能按预期工作。一种方法,我发现克服这个问题是在混合器中导入STL文件并执行UV映射,然后将几何文件导出为JSON对象(您还需要使用blender安装three.js导出器)。然后,您可以使用three.js

对JSON几何执行布尔运算