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

标签 javascript three.js

我正在尝试使用可爱的 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/

相关文章:

javascript - MongoDB $and 查询不适用于变量查询字符串

javascript - 根据 2 个值将数组的数组过滤为唯一?

javascript - Threejs - 将纹理应用到平面总是呈现黑色,

javascript - 如何使用 Three.js 在着色器中传递和使用查找表

javascript - 地球的多边形三 Angular 剖分

javascript - 使用 JavaScript/JQuery 打开最大化新窗口的最快方法?

javascript - 动态添加和删除输入字段jquery 1.10

javascript - 如何在两个数字之间的范围内动态创建不同的步长

3d - 如何在 three.js 中创建 3D 梯形?

javascript - 无法将 Threejs EventDispatcher 附加到自定义对象