当我处理沉重的模型时,我试图在加载JSON时动态显示加载的百分比,因此我用loadAjaxJSON method进行了粗略的测试...

以下加载返回加载期间的百分比,但从不到达回调函数。

是否由于缺少声明,错误的上下文参数或其他原因?我找不到有关的文档。

var loader = new THREE.JSONLoader( true );
loader.loadAjaxJSON(
            document,           // < context ??
            'try.js',
            function ( geometry, materials ) { CreateScene( geometry, materials ); },
            false,              // < texturePath
            function( progress, result ) { console.log((progress.loaded / progress.total * 100).toFixed());}
            )


安慰 :

7 13 20 .. 100
TypeError: a.parse is not a function [three.min.js (ligne 204)]

最佳答案

有时,也更快地查看源代码而不是查找文档。这是JSONLoader的代码:https://github.com/mrdoob/three.js/blob/master/src/loaders/JSONLoader.js
如您所见,上下文应包含两种方法:
解析和onLoadComplete。基本上,您只需要将加载程序作为上下文发送,请查看loadAjaxJSON的快捷方式-方法加载。
关于texturePath,同样在方法加载中,您可以看到它的外观:

texturePath = texturePath && ( typeof texturePath === "string" ) ? texturePath : this.extractUrlBase( url );


如果您深入研究,您会发现extractUrlBase将返回“ ./”,因此在您的情况下,您的代码应如下所示:

var loader = new THREE.JSONLoader( true );
loader.loadAjaxJSON(
        loader,           // context
        'try.js',
        function ( geometry, materials ) { CreateScene( geometry, materials ); },
        './', // texturePath or loader.extractUrlBase('try.js'),
        function( progress, result ) { console.log((progress.loaded / progress.total * 100).toFixed());}
        )

10-08 00:42