从Heightmap计算法线

时间:2018-04-03 22:56:58

标签: vector graphics linear-algebra computational-geometry

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

我找到了几个正确结果的链接,但没有解释背后的数学。

  T
L O R
  B

this link我意识到我可以做到:

Vec3 normal = Vec3(2*(R-L), 2*(B-T), -4).Normalize();

问题是我不知道2*-4的来源。

this explanation of central differencing我看到我们应该将该值除以2,但我仍然不知道如何连接所有这些。

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

PS:Z轴是高度。

1 个答案:

答案 0 :(得分:3)

从矢量微积分中,曲面的法线由梯度算子给出:

enter image description here

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

enter image description here

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

enter image description here

由于从xL的{​​{1}}步骤为2,而R的步骤相同。以上就是你的公式,除以4.当这个向量归一化时,因子4被取消。

(在写这个答案时没有线性代数受到伤害)