threejs无法解析json对象中的材质

threejs无法解析json对象中的材质,json,parsing,three.js,Json,Parsing,Three.js,亲爱的所有人,我正在使用angular 2.4.10和三个js 0.85.0。从服务器下载JSON文件后,我可以使用以下JSON对象: 我正在尝试使用另一篇StackOverflow文章中建议的以下代码在不使用加载程序URL的情况下加载对象: loadModel(aJSONObject) { console.log(aJSONObject); let loader = new THREE.ObjectLoader(); let model = loader.pars

亲爱的所有人,我正在使用angular 2.4.10和三个js 0.85.0。从服务器下载JSON文件后,我可以使用以下JSON对象:

我正在尝试使用另一篇StackOverflow文章中建议的以下代码在不使用加载程序URL的情况下加载对象:

loadModel(aJSONObject) {
    console.log(aJSONObject);

    let loader = new THREE.ObjectLoader();

    let model = loader.parse( aJSONObject );

    console.log(model);

    .....
}

它正在工作,但没有得到材料。如何从JSON文件中获取材料?

我尝试加载您的模型,并且正确导入了唯一的材料

但是,JSON模型中没有为该材质定义纹理或颜色。因此,对象将看起来是白色的,这是three.js材质使用的默认颜色

要在three.js中查看您的模型,请确保根据您的相机位置对其进行适当缩放(我必须将其缩小)。
此外,由于模型使用的是
three.MeshPhongMaterial
,请不要忘记添加一些灯光



顺便说一下,您的模型中定义了一些
X
Y
Z
单独的属性,这些属性会毫无用处地增加其大小(three.js不会使用它们)。

我尝试加载您的模型,并且正确导入了唯一的材质

但是,JSON模型中没有为该材质定义纹理或颜色。因此,对象将看起来是白色的,这是three.js材质使用的默认颜色

要在three.js中查看您的模型,请确保根据您的相机位置对其进行适当缩放(我必须将其缩小)。
此外,由于模型使用的是
three.MeshPhongMaterial
,请不要忘记添加一些灯光



顺便说一句,您的模型中定义了一些
X
Y
Z
单独的属性,这些属性毫无用处地增加了模型的大小(three.js不会使用它们)。

看一看谢谢您,neeh,您是一个明星。如果你知道答案,就再澄清一次。如果我只应用以下代码:
var objLoader=new THREE.ObjectLoader();var object=objLoader.parse(json)在不使用THREE.FileLoader的情况下(当我的服务为我获取JSON对象时),我仍然可以获取一个Object3D,用于渲染,但与FileLoader返回的对象相比,它缺少几个字段。例如,您的代码返回一个bbox(边界框),该框在未使用文件加载时返回的对象中不存在。您知道原因吗?您的
THREE.Mesh
包含在
THREE.Object3D
中。您要查找的是
object.children[0]
。如果要查找
边界框
,应该在网格的几何体中找到它:
对象。子对象[0]。几何体。边界框
三个。文件加载程序
不会更改任何内容。请检查服务返回的数据。如果确实没有
边界框
,请使用
对象.children>进行计算[0].geometry.computeBoundingBox()
。谢谢你,非常感谢。你帮了我很多麻烦。谢谢你,Neeh,你是个明星。如果你知道答案,请再澄清一次。如果我只应用以下代码:
var objLoader=new THREE.ObjectLoader();var object=objLoader.parse(json);
,而不使用THREE.FileLoader()(当我的服务为我获取JSON对象时)我仍然获取了一个Object3D,可以用于渲染,但与FileLoader返回的对象相比,它缺少几个字段(未使用文件加载返回的对象中不存在的边界框。您知道原因吗?您的
THREE.Mesh
包含在
THREE.Object3D
中。您要查找的是
object.children[0]
。如果要查找
边界框
,应该在网格的几何体中找到它:
对象。子对象[0]。几何体。边界框
三个。文件加载程序
不会更改任何内容。请检查服务返回的数据。如果确实没有
边界框
,请使用
对象.children>进行计算[0].geometry.computeBoundingBox()
。谢谢,非常感谢。你帮我省去了很多麻烦。