gpt4 book ai didi

three.js - 使用 mergeVertices() 平滑法线;

转载 作者:行者123 更新时间:2023-12-05 01:09:25 24 4
gpt4 key购买 nike

我正在尝试平滑我使用 THREE.OBJLoader 加载的网格

original result

正如您在此原始图像中看到的那样,所有多边形都是多面的。我试过其他加载器/格式但得到相同的结果。在四处寻找之后,我发现一个可能的解决方案是在计算法线之前合并顶点。当我尝试这个时,我的控制台中出现“TypeError: geometry.mergeVertices is not a function”。这是代码,突出显示了我插入 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);}

我做错了什么?

最佳答案

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

const tempGeo = new Geometry().fromBufferGeometry(child.geometry);

tempGeo.mergeVertices();

// after only mergeVertices my textrues were turning black so this fixed normals issues
tempGeo.computeVertexNormals();
tempGeo.computeFaceNormals();

child.geometry = new BufferGeometry().fromGeometry(tempGeo);

关于three.js - 使用 mergeVertices() 平滑法线;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35843167/

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