【问题标题】:objloader not loading materialobjloader 未加载材料
【发布时间】:2018-06-06 16:51:37
【问题描述】:

我正在使用 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 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 柯 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,我的 spaceip 是全黑的。我有 AmbientLight,所以我确信照明不是问题。

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

【问题讨论】:

    标签: javascript three.js objloader


    【解决方案1】:

    在 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 使模型中的任何引用都通用。

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 2016-07-16
      • 2021-03-23
      相关资源
      最近更新 更多