Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用three.js创建STL对象的横截面_Javascript_Three.js_Threecsg - Fatal编程技术网

Javascript 使用three.js创建STL对象的横截面

Javascript 使用three.js创建STL对象的横截面,javascript,three.js,threecsg,Javascript,Three.js,Threecsg,我试图获取一个心脏模型的横截面,我使用three.js的STLLoader函数加载了该模型。我目前正在尝试使用库的包装器,与中的相同 这是我的csg减法代码 function modelLoadedCallBack( geometry ) { material = new THREE.MeshPhongMaterial( { color: model.color } ); mesh = new THREE.Mesh( geometry, material ); mesh

我试图获取一个心脏模型的横截面,我使用three.js的STLLoader函数加载了该模型。我目前正在尝试使用库的包装器,与中的相同

这是我的csg减法代码

function modelLoadedCallBack( geometry ) {

    material = new THREE.MeshPhongMaterial( { color: model.color } );
    mesh = new THREE.Mesh( geometry, material );
    mesh.rotation.set( model.rotationX, model.rotationY, model.rotationZ );
    mesh.scale.set( model.scale, model.scale, model.scale );
    var originalBSP = new ThreeBSP( mesh );

    var xSectionBSP = new ThreeBSP( xSection );
    var subtractedBSP = originalBSP.subtract( xSectionBSP );

    var result = subtractedBSP.toMesh( material );
    result.geometry.computeVertexNormals();

    scene.add( result );

};
我加载stl模型,然后在加载程序的回调函数中,尝试减去网格。我得到的错误是在ThreeCSG包装文件的第34行,说

ThreeCSG.js:34未捕获类型错误:无法读取未定义的属性“length”

我猜这是因为(a)我没有正确使用ThreeCSG,(b)我需要在代码中的其他地方做减法,或者(c)不支持STL格式的模型


无论如何,我完全被难住了,如果有人在使用three.js方面更有经验,我会非常感谢他的建议。

它看起来是正确的。如果STL几何体为空或您忘记初始化xSection,则可能会发生此错误。

我仔细检查了调试器,发现STL网格的几何体没有faces字段。在3CSG中,调用“geometry.faces.length”,这就是抛出错误的原因。是否有其他方法获取横截面,或者我可以对STL几何体做些什么来修复此问题?更新:我尝试将bufferGeometry转换为常规几何体,但这会显著降低加载时间,并且在我尝试将网格转换为ThreeBSP对象时会使网页崩溃。ThreeCSG不支持缓冲几何。如果它在几何体上崩溃,那听起来像是3csg或csg.js中的bug。注意:这些不是稳定的库。另一个注意:BufferGeometry仅为二进制STL文件创建。如果加载一个ASCII STL文件,它应该可以工作。我的文件太大,无法使用BSP树进行处理,因此我将尝试使用自定义顶点和片段着色器来获取横截面。我不需要任意剪切-只需要沿着指定的平面剪切-所以无论如何使用CSG有点过分了。我的脚本中也有同样的错误。我想这是我们问题的答案。在我的情况下,我可能会使用obj loader。因为我只需要特定平面上的横截面,所以我编写了自己的着色器程序。在片段着色器中,我只需检查给定顶点是否超出切割平面,如果超出切割平面,则丢弃该顶点。如果(视图==1&&vPosition.z>0.0)放弃;-视图描述选定的剖切面。是关于着色器的教程。