我基本上是使用c ++在OpenGL中创建一个简单的3D地形。
任务是通过计算围绕每个面的顶点的法线来计算面法线。
有两种方法可以实现这一点,我不确定哪种方法在速度方面是正确的。
选项1:有一个计算顶点法线的方法,最终将成为O(n ^ 2)运算。 我将迭代2D数组,抓住每个点并执行计算。然后存储它,以便在下一个操作中检索它。 然后,我将有一个计算表面法线的方法,这将最终成为O((n-1)^ 2)操作,因为我将迭代通过2D数组来获取顶点法线然后将其平均化。
我看到的优点:我可以将顶点法线计算减少一半。 缺点:需要有2种方法,每种方法都在2D数组上进行迭代。我还必须继续访问2D数组。
选项2:有一种方法可以计算表面法线,它可以取一个面,抓住周围的点来计算顶点法线,然后计算表面法线并将其存储在一个数组中。
优点:这里我只需迭代一次2D数组,但我必须重复顶点法线计算。 缺点:我会重复计算顶点法线。对于每个面,我需要做4个顶点计算。 那些家伙会有什么更好的方法?