翻转几何体后,如何在Three.JS中翻转法向量?

3
我按照stackoverflow的例子进行操作:ThreeJS几何形状翻转
我成功地将我的几何形状镜像。然而,现在我的几何形状是黑色的。 我是否可以在同一时间内翻转我的法线以更正此问题?或者我应该从一开始就使用不同的方法来镜像几何?
编辑: 尝试添加更新到这个代码,仍然有反转的几何形状。
#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个回答

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

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


添加了那段代码后,我仍然无法使几何图形返回到其正常状态(左侧的模型)。 - Laura
在将几何体添加到网格之前,尝试将矩阵应用于几何体。 - IceCreamYou
这不会解决问题:法线的方向是使用向量的叉积计算出来的。必须反转几何体中每个面的三个整数索引的顺序。也许在最近的Threejs中已经实现了。 - Arnaud

-3

你可以尝试:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接