google / draco

Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics.
https://google.github.io/draco/
Apache License 2.0
6.53k stars 967 forks source link

Unable to run the example application #737

Open nadr0 opened 3 years ago

nadr0 commented 3 years ago

I followed the steps in https://github.com/google/draco/tree/master/javascript/example and the one in the codelabs https://codelabs.developers.google.com/codelabs/draco-3d/index.html#5 but both of them result in the same error.

DRACOLoader.js:7 Uncaught TypeError: Class constructor ic cannot be invoked without 'new'
    at new THREE.DRACOLoader (DRACOLoader.js:7)
    at webgl_loader_draco.html:47
THREE.DRACOLoader @ DRACOLoader.js:7
(anonymous) @ webgl_loader_draco.html:47

In DRACOLoader.js

/**
 * @author Don McCurdy / https://www.donmccurdy.com
 */

THREE.DRACOLoader = function ( manager ) {

    THREE.Loader.call( this, manager ); // <--- this line fails with the error "Uncaught TypeError: Class constructor ic cannot be invoked without 'new'"

    this.decoderPath = '';
    this.decoderConfig = {};
    this.decoderBinary = null;
    this.decoderPending = null;

    this.workerLimit = 4;
    this.workerPool = [];
    this.workerNextTaskID = 1;
    this.workerSourceURL = '';

    this.defaultAttributeIDs = {
        position: 'POSITION',
        normal: 'NORMAL',
        color: 'COLOR',
        uv: 'TEX_COORD'
    };
    this.defaultAttributeTypes = {
        position: 'Float32Array',
        normal: 'Float32Array',
        color: 'Float32Array',
        uv: 'Float32Array'
    };

};

Is anyone able to run the example applications within this repository?

dstoutamire commented 3 years ago

@nadr0 It's not just you. I ran into the same issue. It looks like version skew but I wasn't able to understand enough to workaround.

IanYet commented 3 years ago

This change may fix your problem: In DRACOLoader.js

- THREE.Loader.call( this, manager );
+ const that = new THREE.Loader(manager);
+ Object.assign(this, that);
Carnageous commented 2 years ago

@IanYet's answer fixed it for me. Is this repo accepting PRs for fixes? Issue probably occurred due to a THREE.js version missmatch, as it's not loaded with any specific version in the HTML files.

malleshamdasari commented 2 years ago

@IanYet thanks much, your answer fixed it. This should be merged in the repo!