gpt4 book ai didi

javascript - 将OBJ文件加载到Three.js中的过程

转载 作者:行者123 更新时间:2023-11-27 23:59:58 29 4
gpt4 key购买 nike

我正在尝试使用可爱的 Three.js 将一个 OBJ 及其关联的 MTL 文件上传到 WebGL 场景中。

我刚刚提出了一个问题,但我找不到合理的理由。我在代码中放置了一些全局变量来监视加载 OBJ 和 MTL 文件时发生的情况。虽然它只是一组文件,但“obj”变量来自“Group”类型,并且它确实有两个“子级”。正如 console.log() 所说,它本身不是网格实例,而是它的子实例。然而,当我检查子节点内部时,第一个子节点(由 geo[0] 测量)仅包含顶点,而“faces”数组为空。然而,第二个 child ——通过 geo[1] 测量——拥有所有的顶点和面。甚至当你使用 obj 时,只使用 geo[1] 就可以得到相同的场景。

我关心的是这背后的逻辑。为什么对于一组 OBJ 和 MTL 文件,我们有一个具有两个子对象的对象,其中第一个子对象只有顶点,而第二个子对象也有顶点和面。

这对我来说很重要,因为我想处理顶点和面以获得体素化体积,这需要对场景对象进行直接操作。

scapula = new THREE.OBJMTLLoader();
scapula.load('obj/scapulaTWO.obj', 'obj/scapulaTWO.mtl', function (object) {
// var material = new THREE.MeshFaceMaterial(materials);
var material = new THREE.MeshLambertMaterial({
color: 0xFFFF66
});
obj = object; //group

object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
console.log(child instanceof THREE.Mesh)

geo[i] = child; //mesh
// apply custom material
child.material = material;

// enable casting shadows
child.castShadow = true;
child.receiveShadow = true;

i = i + 1;
}
});

scene.add(geo[1]);
});

最佳答案

加载器解析对象后,您将在对象中找到由您的模型生成的内容。

您可以使用文本编辑器打开 *.obj 并亲自查看组等。它不像 Three.js 删除顶点并将它们放入单独的组中。

关于javascript - 将OBJ文件加载到Three.js中的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31899954/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com