【问题标题】:Flip Normals Three.JS after flipping geometry翻转几何体后翻转法线 Three.JS
【发布时间】:2014-11-05 21:07:32
【问题描述】:

我遵循了这个 stackoverflow 示例: ThreeJS geometry flipping

我成功镜像了我的几何体。但是现在我的几何图形是黑色的。 我可以在翻转几何体的同时翻转法线来纠正这个问题吗?或者我应该从一开始就使用不同的方法来镜像几何?

编辑:

尝试向此代码添加更新,但仍然有倒置几何。

#transformation
mS.elements[5] = -1;
mesh.applyMatrix(mS);

#updates
mesh.geometry.verticesNeedUpdate = true;
mesh.geometry.normalsNeedUpdate = true;
mesh.geometry.computeBoundingSphere();
mesh.geometry.computeFaceNormals();
mesh.geometry.computeVertexNormals();

【问题讨论】:

    标签: three.js geometry normals


    【解决方案1】:

    这是一个老问题,但对于那些仍然迷失的人:面法线是通过查看顶点的逆时针顺序来计算的。

    因此,如果您需要翻转法线,则必须重新排序分配给面的顶点。例如:

    var tmp;
    for(var f = 0; f < geometry.faces.length; f++) {
        tmp = geometry.faces[f].clone();
        geometry.faces[f].a = tmp.c;
        geometry.faces[f].c = tmp.a;
    }
    

    【讨论】:

      【解决方案2】:
      mesh.geometry.verticesNeedUpdate = true;
      mesh.geometry.normalsNeedUpdate = true;
      mesh.geometry.computeBoundingSphere();
      mesh.geometry.computeFaceNormals();
      mesh.geometry.computeVertexNormals();
      

      https://github.com/mrdoob/three.js/wiki/Updates

      【讨论】:

      • 添加该代码后,我仍然无法让几何体恢复其正常状态(左侧的模型)。
      • 在添加到网格之前尝试在几何体上应用矩阵
      • 这不会解决问题:法线的方向是使用向量的叉积计算的。必须颠倒几何图形每个面中三个整数索引的顺序。也许它已经在最近的 Threejs 中实现了。
      【解决方案3】:

      你可以试试:

      mesh.geometry.reverse(computeFaceNormals());
      mesh.geometry.reverse(computeVertexNormals());
      

      【讨论】:

        猜你喜欢
        • 2013-05-25
        • 2023-03-27
        • 2013-11-06
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        相关资源
        最近更新 更多