装载机未加载材料



我正在使用Three.js。我已将 obj 对象加载到我的场景中。对象已加载,但 MTLLoader 未提供材质。我的对象坏了吗?是MTL文件吗?

此代码添加我的宇宙飞船 OBJ

const name = "shipA_OBJ";
loadMesh('shipA_OBJ', function(obj){
obj.position.x = 0;
obj.position.y = 0;
obj.position.z = 450;
obj.rotation.x += 1;
//obj.rotation.y -= 1;
obj.scale.x = .1;
obj.scale.y = .1
obj.scale.z = .1;
addMesh(obj);

}(;

function addMesh(mesh){
scene.add(mesh);
console.log(mesh.getWorldPosition());

}

function loadMesh(name, callback){
var objLoader = new THREE.OBJLoader();
var matLoader = new THREE.MTLLoader();
matLoader.load('models/shipA_OBJ.mtl', function(materials){
materials.preload();
objLoader.setMaterials(materials);
objLoader.load('models/shipA_OBJ.obj', function(obj){
callback(obj);
});
});

}

这是我的 Mtl 文件

3ds Max 波前 OBJ 导出器 v0.97b - (c(2007 大师软件

文件创建时间:04.05.2010 13:43:14

纽姆特尔shipA_mat 纳秒 10.0000 镍 1.5000 d 1.0000 Tr 0.0000 Tf 1.0000 1.0000 1.0000 照明 2 Ka 0.0000 0.0000 0.0000 Kd 0.5880 0.5880 0.5880 Ks 0.0000 0.0000 0.0000 Ke 0.0000 0.0000 0.0000

map_Ka s_1024_C.tga
map_Kd s_1024_C.tga
map_Ke s_1024_I.tga
map_bump s_1024_N.tga

我已将所有tga,mtl和obj文件放在同一个目录中。 当我注释掉MTLLoader时,我的宇宙飞船显示为灰色,但使用MTLLoader时,我的空格是全黑的。我有环境光,所以我确定照明不是问题。

这是我下载obj宇宙飞船的链接:https://www.turbosquid.com/FullPreview/Index.cfm/ID/531813

在 MTL 加载器中,您需要设置纹理路径。在操作系统上本地考虑 3D 模型时,这并不直观,但在 Web 上是有意义的。代码不能假定文件的位置,即使放在同一个目录中也是如此。

幸运的是,类 MTLloader 包含用于此目的的方法。

请参阅: https://threejs.org/docs/#examples/loaders/MTLLoader

举个例子:

function loadMesh(name, callback){
var objLoader = new THREE.OBJLoader();
var matLoader = new THREE.MTLLoader();
matLoader.setTexturePath("models/");
matLoader.load('models/shipA_OBJ.mtl', function(materials){
materials.preload();
objLoader.setMaterials(materials);
objLoader.load('models/shipA_OBJ.obj', function(obj){
callback(obj);
});
});

您还可以使用 setPath 使它对模型中的任何引用通用。

最新更新