【问题标题】:STLloader/THREE.js error: "Uncaught RangeError: offset is outside the bounds of the DataView"STLloader/THREE.js 错误:“未捕获的 RangeError:偏移量超出了 DataView 的范围”
【发布时间】:2022-07-25 15:03:33
【问题描述】:

我想在 javascript 中编写一个 stl 文件的小查看器,所以为此使用库 three.js 和模块 STLLoader,对于这个查看器,我使用 node.js 中的 API 上传系统(我发送通过使用 fetch 请求和在后端强大的保存文件上的文件)和对于 viwer 页面在地址上发出请求并获取 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 文件可以正常工作):“未捕获的 RangeError:偏移量超出了 DataView 的范围”, 我不知道怎么卖的,提前谢谢你。

测试文件示例:test.stl

【问题讨论】:

  • 您介意在此线程中分享您的二进制 STL 文件吗?
  • 我已经编辑了原始问题

标签: javascript node.js three.js stl-format


【解决方案1】:

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

无论如何,请尝试在编辑器中使用similar code。本质上是这样的:

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 );

【讨论】:

    【解决方案2】:

    我终于通过在我的 API (stl) 中添加 node.js 库来解决我的问题,将二进制 stl 转换为 ASCII stl。 link to the library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多