Three.js 如何使mtlLoader和objloader在继续程序的其余部分之前等待加载材质纹理?
请看一看 场景是静态的,因此在加载资源后,只需显式调用一次Three.js 如何使mtlLoader和objloader在继续程序的其余部分之前等待加载材质纹理?,three.js,Three.js,请看一看 场景是静态的,因此在加载资源后,只需显式调用一次renderer.render()命令并查看头部即可。 但是没有看到头部 如果我替换renderer.render(场景、摄影机)使用animate()(设置doRenderViaSingleRender=false)可以看到头部 我认为调用render()一次失败是因为纹理尚未加载。 然而,animate()不断调用render(),因此,当纹理最终加载时,可以看到头部 在objLoader.setMaterials(物料)中设置物料后
renderer.render()
命令并查看头部即可。
但是没有看到头部
如果我替换renderer.render(场景、摄影机)代码>使用animate()
(设置doRenderViaSingleRender=false
)可以看到头部
我认为调用render()
一次失败是因为纹理尚未加载。
然而,animate()
不断调用render()
,因此,当纹理最终加载时,可以看到头部
在objLoader.setMaterials(物料)中设置物料后代码>我希望映射被定义,但它是未定义的。
材质图的控制台日志显示:
console.log('objLoader.materials.materials[lambert2SG.001].map', objLoader.materials.materials['lambert2SG.001'].map);
null
如何让程序等到纹理加载后再运行
谢谢该材质没有贴图集。如果在文本编辑器中打开材质文件,您将看到它具有多个属性,但找不到纹理的路径,因此,对贴图属性输出执行null
# Material Count: 1
newmtl lambert2SG.001
Ns 92.156863
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.250000 0.250000 0.250000
Ni 1.000000
d 1.000000
illum 2
此外,WaltHead对象文件具有顶点位置和法线,但它没有任何UV数据,因此即使指定了贴图纹理,也不会在没有UV的情况下显示
但是,要回答您的问题,您可以使用TextureLoader.load()
手动下载任何纹理。第一个参数是纹理文件的路径,以及在纹理完成加载后触发的函数。该材质没有贴图集。如果在文本编辑器中打开材质文件,您将看到它具有多个属性,但找不到纹理的路径,因此,对贴图属性输出执行null
# Material Count: 1
newmtl lambert2SG.001
Ns 92.156863
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.250000 0.250000 0.250000
Ni 1.000000
d 1.000000
illum 2
此外,WaltHead对象文件具有顶点位置和法线,但它没有任何UV数据,因此即使指定了贴图纹理,也不会在没有UV的情况下显示
但是,要回答您的问题,您可以使用TextureLoader.load()
手动下载任何纹理。第一个参数是纹理文件的路径,以及在纹理加载完成后触发的函数。谢谢您的回复。我创建了另一个使用纹理材料的测试,并更新了我上面的问题。@AvnerMoshkovitz我相信我回答了你原来的问题,请将每篇文章的范围限制为每个问题一个,而不是在回答完第一个问题后在第一个问题上添加更多内容。这是一个完全不同的问题,你应该用这个新问题写一篇新文章。好的,谢谢你的回答。关于如何使用async/await/loadAsync()确保在继续程序之前加载纹理,我发布了一个单独的问题。谢谢您的回复。我创建了另一个使用纹理材料的测试,并更新了我上面的问题。@AvnerMoshkovitz我相信我回答了你原来的问题,请将每篇文章的范围限制为每个问题一个,而不是在回答完第一个问题后在第一个问题上添加更多内容。这是一个完全不同的问题,你应该用这个新问题写一篇新文章。好的,谢谢你的回答。关于如何使用async/await/loadAsync()确保在继续程序之前加载纹理,我提出了一个单独的问题。