gpt4 book ai didi

typescript - ThreeJs OBJLoader + MTLLoader : materials load but don't show

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:50 27 4
gpt4 key购买 nike

使用 OBJLoader 和 MTLLoader,我正在尝试将从互联网下载的低多边形汽车模型加载到我的 Three.JS 场景中。这个模型甚至没有纹理。然而,虽然我确实看到了模型,但我没有看到它上面的 Material (屏幕截图中的右车)。我在 Blender 中打开了 .obj 文件,我确实在 Cycles 渲染中看到了低多边形汽车的颜色。

Material 加载,因为当我console.log ObjMtlLoader.load 返回的值(见下面的代码)时,我可以查看 Material 名称,颜色值对应于 MTL 文件中的内容。

老实说,我不完全确定这是 OBJLoaderMTLLoader 的问题,因为我尝试了 ColladaLoader(左车在屏幕截图上),除了轮子之外,它也没有显示 Material 。

我想知道,鉴于这种有限的背景,您是否对可能的原因有任何线索。我会更深入地研究这个问题,但我已经每天工作 10 个小时,包括周末。我想如果没有任何效果,我将尝试手动创建 Material 。

这是一段代码:

// obj-mtl-loader.ts

export class ObjMtlLoader {

private objLoader: THREE.OBJLoader = new THREE.OBJLoader();
private mtlLoader: THREE.MTLLoader = new THREE.MTLLoader();

constructor(basePath?: string) {
if (basePath) {
this.objLoader.setPath(basePath);
this.mtlLoader.setPath(basePath);
}
}

public load(objFile: string, mtlFile: string): Promise<THREE.Group> {
return new Promise((resolve, reject) => {
this.mtlLoader.load(
mtlFile,
(materialCreator) => {
materialCreator.preload();
this.objLoader.setMaterials(materialCreator);
this.objLoader.load(
objFile,
(model) => {
resolve(model);
},
() => {},
(reason) => reject(reason)
);
},
() => {},
(reason) => reject(reason)
);
});
}

}

这是一个用法示例:

// renderer.ts
new ObjMtlLoader().load(
'/assets/racing/car_model/Low-Poly-Racing-Car.obj',
'/assets/racing/car_model/Low-Poly-Racing-Car.mtl'
).then((car) => {
this.SCENE.add(car);
});

这是截图:

Demo

最佳答案

出于某种原因,ThreeJS(或者可能是我拥有的 ThreeJS 版本)不喜欢多 Material 。当我在 Blender 中按 Material 拆分网格时,一切看起来都很正常。

关于typescript - ThreeJs OBJLoader + MTLLoader : materials load but don't show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46923023/

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