是一个封闭的多边形网格翻转?

tfi*_*iga 3 algorithm 3d graphics geometry

我有一个3D建模应用程序.现在我正在双面绘制网格,但是当对象关闭时我想切换到单面.

如果多边形网格是闭合的(没有边界边缘/完全周期性),我似乎应该始终能够确定对象当前是否被翻转,并自动更正.

被翻转意味着我的法线指向对象而不是对象.翻转是我的缠绕规则与当前正面设置不匹配的结果,但我直接从几何图形计算法线,因此查看法线是一种检测它的简单方法.

我想到的一件事就是拿走边界框,找到最高点,看看它的正常点是向上还是向下 - 如果它向下,那么对象就会被翻转.

但似乎这个解决方案可能容易出现退化几何或浮点错误,因为我只看一个点.我想我可以得到所有6个轴对齐的范围,但这似乎是一个稍好的kludge,而不是一个合适的解决方案.

有一种强大而简单的方法吗?强大而坚硬也会起作用.. :)

Ree*_*sey 5

这是一个强大而缓慢的方法:

取一个偏离质心的边界框的角(强制它在闭合的多边形网格之外保证),然后创建一个从其到网格上任何三角形中心点的线段.

测量该线段与三角形法线之间的角度.

将该线段与网格的每个三角形面相交(包括用于生成线段的三角形).

如果存在奇数个交叉点,则法线和线段之间的角度应<180.如果有偶数,则应该> 180.

如果有偶数个交叉点,则应反转这些数字.

这适用于非常复杂的表面,但它们必须关闭,否则会发生故障.