Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.ObjectLoader出现Three.js错误_Javascript_Json_Three.js - Fatal编程技术网

Javascript Three.ObjectLoader出现Three.js错误

Javascript Three.ObjectLoader出现Three.js错误,javascript,json,three.js,Javascript,Json,Three.js,我似乎对3.ObjectLoader有问题。我正在以JSON格式4.3导出一个场景。此场景包括几何体、材质和灯光。场景在Three.js编辑器中打开,没有任何错误 我正在使用Three.js r70 master开发firefox。 以下是生成的json的链接: 在我尝试编写的查看器中,我使用以下代码进行加载: var manager = new THREE.LoadingManager(); manager.onProgress = function ( item, loaded, total

我似乎对3.ObjectLoader有问题。我正在以JSON格式4.3导出一个场景。此场景包括几何体、材质和灯光。场景在Three.js编辑器中打开,没有任何错误

我正在使用Three.js r70 master开发firefox。 以下是生成的json的链接:

在我尝试编写的查看器中,我使用以下代码进行加载:

var manager = new THREE.LoadingManager();
manager.onProgress = function ( item, loaded, total ) {

    console.log( item, loaded, total );

};

// instantiate a loader 

var loader = new THREE.ObjectLoader(manager);

loader.load( 
    // resource URL coming from other file
    Name, 
    // Function when resource is loaded 
    function ( result ) 
    { scene.add( result.scene ); }, 
    // Function called when download progresses 
    function ( xhr ) 
    { console.log( (xhr.loaded / xhr.total * 100) + '% loaded' ); }, 
    // Function called when download errors 
    function ( xhr ) 
    { console.log( 'An error happened' ); } 
);
在控制台中,我看到以下内容:

THREE.WebGLRenderer 70  three.min.js (line 513)
100% loaded content.js (line 117)
THREE.Object3D.add: undefined is not an instance of THREE.Object3D. three.min.js (line 164)
js/Test83.js 1 1    content.js (line 86)
该错误也出现在第7674行的unnified three.js中

如果我在Three.js编辑器中创建几何体和其他对象并将其导出为场景,也会出现此问题

问题似乎在这里:
scene.add(result.scene)
假设THREE.ObjectLoader可以从文件中使用JSON,这是不正确的吗?在我发布的代码中,如果我删除
scene.add(result.scene)似乎文件至少加载了(数据加载,没有几何图形可视化),因为没有出现错误。如果我有很多网格的场景,进度会输出到控制台(10%加载,20%加载,等等)


任何见解都将不胜感激。

在进一步挖掘之后,我意识到我需要使用一个3.XHRLoader来引入json,然后使用3.ObjectLoader来解析结果。像这样的方法应该会奏效:

var loaderObj = new THREE.ObjectLoader();
var loader = new THREE.XHRLoader();
            loader.load( 'js/data.json', function ( text ) {
                text = "{ \"scene\" : " + text + " }";
                var json = JSON.parse( text );
                var scene = loaderObj.parse( json.scene );
            },
            // Function called when download progresses 
            function ( xhr ) 
            { console.log( (xhr.loaded / xhr.total * 100) + '% loaded' ); }, 
            // Function called when download errors 
            function ( xhr ) 
            { console.log( 'An error happened' ); }  );

这种方法效果很好,是从检查通过ThreeJS编辑器发布场景时生成的代码中学到的。

我认为你应该只做
场景。添加(结果)

p.s.如果我在尝试
场景添加(结果)之前询问
结果
对象我看到文件中的所有JSON内容。所以它似乎负载正常。我将看看我是否能追踪到任何重要的未定义对象,看看与它们混淆是否会产生影响。因此result.scene是罪魁祸首,因为它实际上可以替换现有场景。如果我这样做
scene=result然后我得到一个全白色的世界。对象存在,但它们似乎没有材质(尽管材质确实显示为其属性的一部分)。如果我遍历结果的子对象,我可以将网格添加到场景中,并使用默认的平面材质获取它们。因此,我正在取得进展,只是似乎有一种我缺少的更好的方法,即获取结果并用对象加载程序显示它们。我认为如果它只是一个对象,这会起作用,但如果我尝试插入
场景。添加(result.object)
在上面原始帖子的代码中,我得到了一个额外的错误,因为该文件包含元数据、灯光等。我还得到了上面提到的错误:
THREE.Object3D.add:undefined不是THREE.Object3D的实例。three.min.js(第164行)
这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@DLeh抱歉,但您不知道自己在说什么。@LuisE.Fraguada刚刚更新了答案<代码>结果
应该已经是一个
Object3D
。这简化了很多事情!谢谢@mrdoob