【发布时间】:2016-08-16 09:44:32
【问题描述】:
我正在尝试在 JSON 场景中创建不同的材质,将默认材质分配给网格,并让用户在用户界面中的不同材质之间切换。
解析 JSON 后是否可以引用所有材料,甚至是未使用的材料?
【问题讨论】:
标签: json three.js loading scene
我正在尝试在 JSON 场景中创建不同的材质,将默认材质分配给网格,并让用户在用户界面中的不同材质之间切换。
解析 JSON 后是否可以引用所有材料,甚至是未使用的材料?
【问题讨论】:
标签: json three.js loading scene
检查THREE.ObjectLoader 的代码后,发现它解析了整个JSON,但显式返回了对场景对象的单个引用。我通过在运行时修补 parse 方法解决了这个问题。代码取自THREE.ObjectLoader.parse,只有返回值不同(返回Object,不再返回THREE.Object3D)。
function objectLoaderParseOverride(json, onLoad) {
var ret = {};
ret.geometries = this.parseGeometries( json.geometries );
ret.images = this.parseImages( json.images, function () {
if ( onLoad !== undefined ) onLoad( ret );
} );
ret.textures = this.parseTextures( json.textures, ret.images );
ret.materials = this.parseMaterials( json.materials, ret.textures );
ret.object = this.parseObject( json.object, ret.geometries, ret.materials );
if ( json.animations ) {
ret.object.animations = this.parseAnimations( json.animations );
}
if ( json.images === undefined || json.images.length === 0 ) {
if ( onLoad !== undefined ) onLoad( ret );
}
return ret;
}
var loader = new THREE.ObjectLoader();
loader.parse = objectLoaderParseOverride;
【讨论】: