从 ThreeJS 的 DracoLoader 获取他的网格

Get he mesh from the DracoLoader of ThreeJS

我在 ThreeJS 的 Draco 加载器上工作,但遇到加载器问题。我实际上需要 dracofile 加载的网格,但在我使用此代码加载网格后网格不可用:

    let mesh;
    const loader = new DRACOLoader();
    loader.setDecoderPath('./Three/examples/js/libs/draco/')
    loader.load('PATHTO drc file', function(geometry) {
        var material = new THREE.PointsMaterial({ size: 0.05 });
        material.vertexColors = false
        mesh = new THREE.Points(geometry, material);
        mesh.position.set(0, 0, -1);
    });
    console.log(mesh) // print undifined

我需要网格来执行一些操作,你有解决这个问题的线索吗?

加载回调是异步运行的,因此紧随其后的行先运行,然后才定义网格。有很多方法可以管理异步编程(我建议 https://eloquentjavascript.net/11_async.html 作为介绍)但是在这种情况下一个简单的解决方案是将后面的代码放入回调中:

let mesh;

...

loader.load('...', (geometry) => {
  mesh = ...
  start();
});

...

function start() {
  console.log(mesh);
}