2

I use three.js OBJLoader to get mesh info, use traverse to get geometry info, but only get position, normal, uv, no indices. Is anyone know how to get indices from OBJLoader? enter image description here

async function loadObj2(filename) {
    let ret;
    return new Promise(function(resolve, reject) {
            const loader = new OBJLoader();
            loader.load(
                filename,
                (object) => {
                    try{
                        object.traverse((child) => {
                            if(child.isMesh) {
                                let geo = child.geometry;
                                ret = {
                                    position: geo.attributes.position.array,
                                    normal: geo.attributes.normal.array,
                                    uv: geo.attributes.uv.array,
                                };
                            }
                        });
                        ret = 1;
                        resolve(ret);
                    }
                    catch(e){
                        console.log(e);
                        reject(e);
                    }
                },
            (xhr) => {
                console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
            },
            (error) => {
                console.log( 'An error happened' + error );
                reject();
            }
        )
    });
}
薛潇宇
  • 31
  • 3

1 Answers1

2

THREE.OBJLoader always creates non-indexed geometries. Meaning the index property of the geometry is null.

If you need an index for some reasons, you can compute it manually by using BufferGeometryUtils.mergeVertices().

Mugen87
  • 28,829
  • 4
  • 27
  • 50