在计算机图形学中一个三角面的法线朝向决定了 该三角面的光照渲染等一系列的操作。
在建模的时候,法线朝向也决定了建模的效果。
譬如在CSG库中对模型进行布尔运算就需要模型的三角面都是法线朝外的。
自定义建模则需要计算三角面的顺序,并调整三角面的顺序
public boolean needChangTrangles(List<Vector3d> vertices, Vector3d refer) { boolean retHasChange = false; //求三角形的法向量 Vector3d aPoint = vertices.get(0); Vector3d bPoint = vertices.get(1); Vector3d cPoint = vertices.get(2); Polygon tempPolygon = Polygon.fromPoints(vertices); Vector3d normal = tempPolygon.getPlane().getNormal(); double mD = -normal.dot(aPoint); double temp = normal.dot(refer) + mD; //v>0为逆时针,反之为顺时针 if (temp > 0) { retHasChange = false; } else { retHasChange = true; } return retHasChange; }
其中refer为参考点的坐标,法线顺时针还是逆时针都是需要有参考点的。即该三角形相对于该参考点是逆时针还是顺时针。