tfi*_*iga 3 algorithm 3d graphics geometry
我有一个3D建模应用程序.现在我正在双面绘制网格,但是当对象关闭时我想切换到单面.
如果多边形网格是闭合的(没有边界边缘/完全周期性),我似乎应该始终能够确定对象当前是否被翻转,并自动更正.
被翻转意味着我的法线指向对象而不是对象.翻转是我的缠绕规则与当前正面设置不匹配的结果,但我直接从几何图形计算法线,因此查看法线是一种检测它的简单方法.
我想到的一件事就是拿走边界框,找到最高点,看看它的正常点是向上还是向下 - 如果它向下,那么对象就会被翻转.
但似乎这个解决方案可能容易出现退化几何或浮点错误,因为我只看一个点.我想我可以得到所有6个轴对齐的范围,但这似乎是一个稍好的kludge,而不是一个合适的解决方案.
有一种强大而简单的方法吗?强大而坚硬也会起作用.. :)
这是一个强大而缓慢的方法:
取一个偏离质心的边界框的角(强制它在闭合的多边形网格之外保证),然后创建一个从其到网格上任何三角形中心点的线段.
测量该线段与三角形法线之间的角度.
将该线段与网格的每个三角形面相交(包括用于生成线段的三角形).
如果存在奇数个交叉点,则法线和线段之间的角度应<180.如果有偶数,则应该> 180.
如果有偶数个交叉点,则应反转这些数字.
这适用于非常复杂的表面,但它们必须关闭,否则会发生故障.