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