Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 如何使mtlLoader和objloader在继续程序的其余部分之前等待加载材质纹理?_Three.js - Fatal编程技术网

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()确保在继续程序之前加载纹理,我提出了一个单独的问题。