开发者问题收集

STLloader/THREE.js 错误:“未捕获的 RangeError:偏移量超出了 DataView 的边界”

2022-03-19
1991

我想用 javascript 编写一个小型的 stl 文件查看器,因此为此使用带有模块 STLLoader 的 three.js 库,对于此查看器,我使用带有 node.js API 的上传系统(我使用获取请求发送文件,并在后端保存文件),对于查看器,页面使用获取对地址发出请求并获取 stl 文件内容,现在为了加载 stl 数据,我使用此代码:

var contents = stl_name;

var geometry = new THREE.STLLoader().parse( contents );
geometry.sourceType = "stl";

var mesh = new THREE.Mesh( geometry, material );
mesh.rotation.x = 5;
mesh.rotation.z = .25;
scene.add( mesh );

但它返回一个错误(我只在使用 stl 二进制文件时遇到此错误,ASCII stl 文件工作正常):“Uncaught RangeError:偏移量超出了 DataView 的边界”, 我不知道如何出售它,提前谢谢您。

测试文件的示例: test.stl

2个回答

我可以通过拖放成功将资产导入 three.js 编辑器 。因此,您的应用程序似乎存在问题,或者您没有使用最新版本的 three.js

无论如何,请尝试使用 类似代码 ,就像在编辑器中一样。它本质上是这样的:

const reader = new FileReader();

reader.addEventListener( 'load', function ( event ) {

    const contents = event.target.result;

    const geometry = new THREE.STLLoader().parse( contents );
    const material = new THREE.MeshStandardMaterial();

    const mesh = new THREE.Mesh( geometry, material );
    mesh.name = filename;

    scene.add( mesh );

}, false );

reader.readAsArrayBuffer( file );
Mugen87
2022-03-23

我最终通过在我的 API (stl) 中添加 node.js 库将二进制 stl 转换为 ASCII stl 解决了我的问题。 链接到库

B0tm4n
2022-03-30