我正在尝试使用THREE.OBJLoader
平滑我加载的网格正如您在此原始图像中所看到的,所有多边形都是刻面的。我尝试过其他加载器/格式但得到相同的结果。在生根后我发现可能的解决方案是在计算法线之前合并顶点。当我尝试这个时,我在控制台中得到“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);}
我做错了什么?
答案 0 :(得分:6)
转换为常规几何体,应用您需要的任何内容并转换回缓冲区几何体。我正在使用ES6模块加载器,所以没有三个。前缀
mnesia
答案 1 :(得分:1)
加载obj文件时发生了这个问题。如果您有像3dsmax这样的3d软件:
打开obj文件, 转到多边形选择模式并选择所有多边形。 在“曲面属性”面板下,单击“自动平滑”按钮。 将模型导出回obj格式
现在您不必调用函数geometry.mergeVertices()和geometry.computeVertexNormals();.只需加载obj并添加到场景中,网格就会很流畅。