首页 > 解决方案 > 使用材质 Three.js 合并网格

问题描述

我正在尝试在 Three.js 中合并网格。网格从 Blender 导出的 COLLADA 模型加载。这是未合并加载的模型:

普通型号: 在此处输入图像描述

当我尝试合并网格时,这就是我得到的:合并模型: 在此处输入图像描述

我认为我遇到了材质 UV 的问题,因为我收到了 288 条警告消息,例如:

THREE.DirectGeometry.fromGeometry(): Undefined vertexUv 99945

数字从 99945 到 100232。

这是我用来合并网格的代码:

    loader.load(modelPath, function(model)
    {
        var modelShape = model.scene;

        var materialsArray = new Array();
        var mergedGeometry = new THREE.Geometry();
        var materialIndex = 0;

        modelShape.traverse(function(mesh)
        {
            if(mesh instanceof THREE.Mesh && typeof mesh.material !== "undefined")
            {
                var modelGeometry = new THREE.Geometry().fromBufferGeometry(mesh.geometry);
                modelGeometry.mergeVertices();

                mergedGeometry.merge(modelGeometry, mesh.matrix, materialIndex);
                materialsArray[materialIndex] = mesh.material;

                materialIndex++;
            }
        });

        mergedGeometry.mergeVertices();
        mergedGeometry.rotateX(-90 * Math.PI / 180);

        var modifier = new THREE.SubdivisionModifier(subdivisions);
        var geometrySmoothed = mergedGeometry;

        mergedGeometry.groupsNeedUpdate = true;
        mergedGeometry.uvsNeedUpdate = true;

        var mesh = new THREE.Mesh(geometrySmoothed, materialsArray);

        this.models.push(mesh);
    }

那么,有人知道错误在哪里吗?从 Blender 导出会出错吗?

标签: javascriptthree.js

解决方案


推荐阅读