Catmull Clarke 不保留平面法线

Catmull Clarke doesn't preserve planar normals

在我展示的玩具示例中,其中一个表面法线明显错误地指向内部。我可以按预期创建一个法线朝外的新立方体,但在使用 Catmull Clarke 处理后,无法保证所有法线都保持现存的面向。

由于我需要使用四边形,我知道我可以通过调换顶点顺序来修复面,即 [a b c d] -> [d c b a] 从而修复法线。但是我如何确定给定面的法线指向错误的方向?

(没有足够的代表嵌入)https://gyazo.com/e20576e700196a43a2378eb055a71b38

您可以检查面法向量与从立方体质心到面上任意点的向量之间的点积符号。

假设面 [a,b,c,d] 的法向量是 n。接下来,通过平均其 8 个顶点坐标来计算立方体的质心,我们称之为 p.

然后,计算dir = dot(n,(a-p))。如果 dir > 0,法线 n 从立方体指向外。如果dir为负数,则必须翻转法线。

此方法适用于任何凸多面体的面。如果您处理的是非凸多面体,则必须使用上述方法 here.