在Three.js中使用FBXLoader将BufferGeometry转换为Geometry

时间:2019-01-06 22:06:38

标签: javascript three.js geometry buffer-geometry

这是我的代码,用于加载.fbx对象,默认情况下,该对象将对象加载为BufferGeometry

var loader = new THREE.FBXLoader();

async function loadFiles(scene,props) {

  const {files, path, childName, fn} = props;

  if (index > files.length - 1) return;
  loader.load(path+files[index], object => {
    // apply functions / transformations to obj
    let sceneObj = fn.call(null,object,props);
    if (sceneObj) { scene.add(sceneObj) }

    // add obj to scene and push to array
    scene.add(object);
    objects.push(object);

    // if there is another object to load, load it
    index++;
    loadFiles(scene,props);
  });
}

我想使用var geometry = new THREE.Geometry().fromBufferGeometry( bufferGeometry );来解决此问题,但是我似乎没有在加载器函数中构建mesh,因此我看不到如何实现此代码。

我想以一种可读的方式访问对象的顶点,这就是为什么我不想将其加载为BufferGeometry的原因。

1 个答案:

答案 0 :(得分:1)

加载器返回一个对象,该对象将包含上面带有几何图形的网格。您将需要遍历对象及其子对象,并在遇到它时转换BufferGeometry。这是实现该目标的想法:

loader.load(path+files[index], object => {

    // iterate over all objects and children
    object.traverse(child => {

        // convert the buffer geometry
        if (child.isMesh && child.geometry.isBufferGeometry) {

            const bg = child.geometry;
            child.geometry = (new THREE.Geometry()).fromBufferGeometry(bg);

        }

    });

    // ... do something with the loaded model...

});

希望有帮助!