首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >objloader不加载材料

objloader不加载材料
EN

Stack Overflow用户
提问于 2018-06-07 00:51:38
回答 1查看 1.1K关注 0票数 0

我和Three.js一起工作。我已经将一个obj对象加载到我的场景中。对象加载,但MTLLoader未提供材质。我的对象坏了吗?是MTL文件吗?

这段代码添加了我的宇宙飞船OBJ

代码语言:javascript
复制
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);

});

代码语言:javascript
复制
function addMesh(mesh){
scene.add(mesh);
console.log(mesh.getWorldPosition());

}

代码语言:javascript
复制
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导出器v0.97b - (c)2007 guruware

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

newmtl shipA_mat Ns 10.0000 Ni 1.5000 d 1.0000 Tr 0.0000 Tf 1.0000 1.0000 1.0000 illum 2 Ka 0.0000 0.0000 0.0000 Kd 0.5880 0.5880 Ks 0.0000 0.0000 0.0000 Ke 0.0000 0.0000 0.0000

代码语言:javascript
复制
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时,我的spacesip全是黑色的。我有AmbientLight,所以我确信照明不是问题所在。

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

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 01:35:52

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

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

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

举个例子:

代码语言:javascript
复制
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使其对模型中的任何引用通用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50725676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档