objloader没有加载材料

时间:2018-06-06 16:51:38

标签: javascript three.js objloader

我和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 Wavefront OBJ Exporter v0.97b - (c)2007 guruware

创建文件:04.05.2010 13:43:14

newmtl shipA_mat     Ns 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我的太空飞船全是黑色的。我有AmbientLight,所以我确定照明不是问题。

这是我下载obj太空船的地方的链接:https://www.turbosquid.com/FullPreview/Index.cfm/ID/531813

1 个答案:

答案 0 :(得分:0)

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

幸运的是,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使模型中的任何引用都相同。