我正在使用material.toJSON()提供的方法导出一个three.js材质,结果如下:
{
"metadata":{"version":4.5,"type":"Material","generator":"Material.toJSON"},
"uuid":"8E6F9A32-1952-4E12-A099-632637DBD732",
"type":"MeshStandardMaterial",
"color":11141120,
"roughness":1,
"metalness":0.5,
"emissive":0,
"map":"876D3309-43AD-4EEE-946F-A8AE8BA53C9E",
"transparent":true,"depthFunc":3,"depthTest":true,"depthWrite":true,
"textures":[
{
"uuid":"876D3309-43AD-4EEE-946F-A8AE8BA53C9E",
"name":"",
"mapping":300,
"repeat":[1,1],
"offset":[0,0],
"center":[0,0],
"rotation":0,
"wrap":[1001,1001],
"minFilter":1008,
"magFilter":1006,
"anisotropy":1,
"flipY":true,
"image":"C6B4FEDA-8E7E-490A-A1AD-866ECE36E952"}],
"images":[
{
"uuid":"C6B4FEDA-8E7E-490A-A1AD-866ECE36E952",
"url":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAEACAYAAADFkM5nAAAg[...]"
}]}
我尝试使用MaterialLoader作为示例建议
https://threejs.org/docs/#api/loaders/MaterialLoader
但是在解析时我总是得到这个错误
THREE.MaterialLoader:未定义的纹理 876D3309-43AD-4EEE-946F-A8AE8BA53C9E
如果我希望MaterialLoader使用嵌入式资源,那我错了吗? 我做错了或遗失了什么? 我怎样才能将json文件中的图像加载到相关的纹理中?
谢谢!
这里有一个小提琴: http://jsfiddle.net/akmcv7Lh/211/
答案 0 :(得分:0)
请注意,MaterialLoader
无法加载纹理。它期望在像MaterialLoader.setTextures()
一样加载JSON文件之前,通过ObjectLoader
设置纹理:
const loader = new MaterialLoader();
loader.setTextures( textures );
因此,MaterialLoader
仅在各自的材质没有纹理的情况下才能用作独立的加载器。否则,您必须像ObjectLoader
一样在应用程序级别上准备纹理。