Преобразование BufferGeometry в Geometry с помощью FBXLoader в Three.js - PullRequest
0 голосов
/ 07 января 2019

Вот мой код для загрузки объекта .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 голосов
/ 07 января 2019

Загрузчик возвращает объект, который будет содержать сетки с геометрией. Вы захотите пройтись по объекту и его дочерним элементам и преобразовать 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...

});

Надеюсь, это поможет!

...