three.js加载obj/mtl文件后呈现黑色

3
我正在尝试将一个相当复杂的.obj文件加载到three.js中。以下是代码:

    // Load obj file
    var loader = new THREE.OBJMTLLoader();
    loader.load('MQ-9.obj', 'MQ-9.mtl', function(object) {
            scene.add(object);
    });

MQ-9.mtl文件涉及到三张图片,这些图片在物体的不同部位(MQ-9 Predator无人机)使用。我可以正常加载对象,但它全是黑色的。图片似乎没有被加载。我做错了什么?


2
你的控制台有错误吗?场景中是否有灯光?你确定在所有资产加载完成后再进行渲染吗?能否提供一个实时示例的链接? - WestLangley
谢谢回复。没有控制台错误。我想灯光已经有了。其他元素是可见的。只是这个对象没有纹理。我肯定正在渲染,其他东西都显示出来了。所有其他元素都是使用基本形状创建的,而不是加载的。我会尝试将代码上传到实时服务器... - Frank Miller
我希望有一种方法可以添加屏幕截图。 - Frank Miller
你关于灯光的建议很有效。我添加了环境光,表面图像出现了。谢谢! - Frank Miller
1个回答

1
如果您加载一个模型并且它呈现为黑色,可能有几个可能的原因,其中一些包括模型存在问题。确保您没有控制台错误。
除此之外,最常见的两个原因是:
1. 场景中缺少灯光 2. 在所有资产加载完成之前渲染场景
three.js r.67

感谢West的建议。我现在遇到了一些加载错误。其中两个图像似乎正在加载,但一个没有。我收到了一堆这样的错误:“THREE.OBJMTLLoader:未处理的行1374/1867/2272”。这似乎转到加载器代码OBJMTLLoader.js:347中的if语句。这似乎是一个if语句,根据其在文件中遇到的行的类型进行切换。看起来在这个特定的obj文件(或mtl)中可能有一种行类型,加载器无法理解。 - Frank Miller
似乎有一些行(在.obj文件中)会继续到下一行。这是一个例子。第一行看起来像这样:f 1370/1863/2268 1366/1864/2269 1412/1865/2270 1411/1866/2271,第二行看起来像这样:1374/1867/2272。也许加载器代码无法处理连续行? - Frank Miller
好的,所以每个长行都以反斜杠结尾,然后最后一组数字在下一行。这对我来说似乎是加载器代码中的一个错误?这些是.obj文件中的“f”行。 - Frank Miller
如果您找不到问题的根源,请发布一个新帖子。three.js不支持四边形 - 只支持三角形。 - WestLangley
这更像是文件本身的问题,而不是加载器的问题。你不应该出现没有定义的那一行。你导出了什么?如果我读得正确,那看起来像是一个具有5个不同属性的网格?你能链接一部分你的obj文件吗? - pailhead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接