Javascript Three.ObjectLoader出现Three.js错误
我似乎对3.ObjectLoader有问题。我正在以JSON格式4.3导出一个场景。此场景包括几何体、材质和灯光。场景在Three.js编辑器中打开,没有任何错误 我正在使用Three.js r70 master开发firefox。 以下是生成的json的链接: 在我尝试编写的查看器中,我使用以下代码进行加载: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
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