gpt4 book ai didi

javascript - OBLLoader + MTLLoader 添加 Material 后模型未显示

转载 作者:行者123 更新时间:2023-11-28 04:23:36 25 4
gpt4 key购买 nike

无论出于何种原因,当我将使用 MTLLoader 加载的 Material 应用到使用 OBJLoader 加载的模型时,模型本身就会消失。

MTLLoader.setPath( 'models/' );
var url = "model.mtl";
MTLLoader.load( url, function( materials ) {

materials.preload();
OBJLoader.setPath( 'models/' );
OBJLoader.load( 'model.obj', function ( object ) {

object.traverse(function(child) {
if (child instanceof THREE.Mesh) {
child.material = materials ; // this is the problem
}
scene.add( object );
});
});

我知道MTLLoader设置 Material 的方法是OBJLoader.setMaterials(materials)但我想按照上面的方式去做。但这样做会使对象因任何原因消失而不会出现任何错误。有谁知道为什么会发生这种情况?

最佳答案

child.material 需要某种 Material ,例如MeshPhong Material 。但MTLLoader.load回调函数给出的materials并不是那种 Material 。查看源代码可以发现回调为您提供了一个 MaterialCreator 对象。该对象包含一个 materials 映射,其中从 mtl 文件解析的所有 Material 均按名称列出。因此,要将 Material 分配给您的对象,您可以编写:

child.material = materials.materials[ materialName ];

或者,如果只有一种 Material 并且您不知道 Material 名称,您也可以这样做:

child.material = materials.getAsArray()[0];

或者查看对象本身:console.log(materials)

免责声明:我刚刚查阅了MTLLoader的源代码,尚未对其进行测试。

关于javascript - OBLLoader + MTLLoader 添加 Material 后模型未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com