从阅读论文到第2页,似乎体积的权重存储在网格的角落,而不是通常的Marching Cubes样式算法更喜欢立方体本身的重量。这些角权重定义沿2个角之间的边之间的点,每个角之间都有一个符号变化。具有符号变化的边缘也存储该边缘的法线,该法线是OP中2D表示中的斜线。正常信息是在体积创建期间定义的(通过使用任何编辑工具或程序性体积创建方法),而不是在生成等值面之后,如Marching Cubes样式算法所期望的那样。该法线数据“声明”通过点的线/面必须具有预定义的法线值。如果行进立方体会使该点处的线弯曲以与相邻边上的另一个点配合,则扩展行进立方体和双重轮廓将使线/面向外延伸,直到与穿过该点上的线/面相交为止。正常值不同的相邻边。这样可以从体数据中创建尖角,而基本的Marching Cubes算法将在某种程度上完善表面。我不太了解QEF(二次误差函数)如何发挥作用,除了QEF似乎使计算角点将位于的多维数据集中的扩展点更容易之外。扩展的行进立方体和双重轮廓都将线/表面延伸到与穿过相邻边上具有不同法线值的点的线/表面相交。这样可以从体数据中创建尖角,而基本的Marching Cubes算法将在某种程度上完善表面。我不太了解QEF(二次误差函数)如何发挥作用,除了QEF似乎使计算角点将位于的多维数据集中的扩展点更容易之外。扩展的行进立方体和双重轮廓都将线/面向外延伸,直到与穿过相邻边上具有不同法线值的点的线/面相交为止。这样可以从体数据中创建尖角,而基本的Marching Cubes算法将在某种程度上完善表面。我不太了解QEF(二次误差函数)是如何发挥作用的,除了看起来它们使计算角点所在的多维数据集中的扩展点变得更容易之外。
请注意,这里我一直在以OP中的表示形式在2D意义上谈论线条和边缘。我将不得不做更多的阅读和思考,以将其扩展到3D以生成体积网格。
为了解决有关如何生成法线的问题的第二部分,并从噪声驱动的程序角度进行思考,似乎您将用噪声数据填充体积,然后寻找符号变化的边缘,然后检查这四个立方体共享边以找出要生成哪些三角形,并像对多个三角形的任何其他交集一样计算顶点法线,取共享顶点的每个三角形的法线平均值。就我而言,这是非常投机的,因为本文主要涉及由扫描转换的网格生成的CSG操作和体积,两者在表面上均具有明确的法线。
我希望至少答案的第一部分能够解决重量数据的表示和使用方式与基本的Marching Cubes完全不同的区别,以及为什么必须在体积生成过程的早期就创建正常数据,在使用基本行进立方体的情况下,通常在网格生成过程的最后阶段创建法线。