【发布时间】:2018-02-24 00:14:36
【问题描述】:
我正在使用版本 R73。 我目前的任务是用材料填充数组。该数组的内容应该稍后使用。这种用法取决于我完全加载的所有材料。
现在我遍历一个 JSON 信息数组并为每个元素调用此代码:
TLoader.load(
BASE_ODB_URL + jsonMat.pic,
function (texture) {
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set(jsonMat.scaleu, jsonMat.scalev);
Mat = new THREE.MeshLambertMaterial({
map : texture,
side : THREE.DoubleSide,
name : jsonMat.mname
});
THREEMatList.push(Mat);
},
function (xhr) {
}, //onProgress
function (xhr) {
Mat = new THREE.MeshLambertMaterial({
color : 0xff0000,
side : THREE.DoubleSide,
name : jsonMat.mname
});
THREEMatList.push(Mat);
}
)
TLoader 之前初始化过:var TLoader = new THREE.TextureLoader();
如果材料不存在,当需要时,我会获得备用材料。这只是作为一个错误选项。 有没有办法等到 .load() 完成?
【问题讨论】:
-
在您的材质列表完全填充之前是否跳过实际渲染(而不是使用备用材质)?
-
function (texture) {仅在纹理加载后调用。 -
为什么不先填写一组“备用”素材,以在成功下载的情况下替换它们?
标签: javascript three.js