three.js - 使用mergeVertices();

时间:2016-03-07 11:58:40

标签: three.js

我正在尝试使用THREE.OBJLoader

平滑我加载的网格

original result

正如您在此原始图像中所看到的,所有多边形都是刻面的。我尝试过其他加载器/格式但得到相同的结果。在生根后我发现可能的解决方案是在计算法线之前合并顶点。当我尝试这个时,我在控制台中得到“TypeError:geometry.mergeVertices不是函数”。这是代码,突出显示我插入mergeVertices()函数的位置。

        var loader = new THREE.OBJLoader();
        loader.load('../assets/models/nos2.obj', function (nos) {
        var material = new THREE.MeshLambertMaterial({color: 0xffffff, side:THREE.DoubleSide});

        nos.children.forEach(function (child) {
            child.material = material;
            child.geometry.mergeVertices(); /* ADDED MERGE WHICH GIVES ERROR */
            child.geometry.computeFaceNormals();
            child.geometry.computeVertexNormals();
        });

        nos.scale.set(300, 300, 300);
        nos.rotation.x = -0.3;
        scene.add(nos);}

我做错了什么?

2 个答案:

答案 0 :(得分:6)

转换为常规几何体,应用您需要的任何内容并转换回缓冲区几何体。我正在使用ES6模块加载器,所以没有三个。前缀

mnesia

答案 1 :(得分:1)

加载obj文件时发生了这个问题。如果您有像3dsmax这样的3d软件:

打开obj文件, 转到多边形选择模式并选择所有多边形。 在“曲面属性”面板下,单击“自动平滑”按钮。 将模型导出回obj格式

现在您不必调用函数geometry.mergeVertices()和geometry.computeVertexNormals();.只需加载obj并添加到场景中,网格就会很流畅。