从高度图计算法线

gdf*_*f31 9 graphics vector linear-algebra computational-geometry

我正在尝试使用中心差分将高度图转换为法线矩阵,该矩阵稍后将对应于给定点的陡度。

我发现了几个具有正确结果的链接,但没有解释背后的数学原理。

  T
L O R
  B
Run Code Online (Sandbox Code Playgroud)

这个链接我意识到我可以这样做:

Vec3 normal = Vec3(2*(R-L), 2*(B-T), -4).Normalize();
Run Code Online (Sandbox Code Playgroud)

问题是我不知道2*-4来自哪里。

这个中心差分的解释中,我看到我们应该将该值除以 2,但我仍然不知道如何将所有这些联系起来。

我真正想知道的是这背后的线性代数定义。我有一个高度图,我想测量中心差异,我想获得法线向量以供稍后用于测量陡度。

PS:Z轴是高度。

meo*_*dog 12

根据矢量演算,表面的法线由梯度算子给出:

在此处输入图片说明

高度图h(x, y)是函数的一种特殊形式f

在此处输入图片说明

对于离散化的高度图,假设网格大小为 1,上述两个导数项的一阶近似值由下式给出:

在此处输入图片说明

由于xL到的步长R是 2,对于y. 上面就是你的公式,除以 4。当这个向量被归一化时,4 的因子被取消。

(在撰写此答案时没有损害线性代数)