翻转几何后翻转法线Three.JS

时间:2014-09-11 19:24:38

标签: three.js geometry normals

我遵循了这个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();

geometry

3 个答案:

答案 0 :(得分:4)

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

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

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;
}

答案 1 :(得分:3)

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

答案 2 :(得分:-2)

你可以尝试:

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