从高度图计算法线
Calculate Normals from Heightmap
我正在尝试使用中心差分将高度图转换为法线矩阵,稍后将对应于给定点的陡度。
我找到了几个结果正确的链接,但没有解释背后的数学原理。
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轴为高度
根据矢量微积分,表面的法线由 梯度运算符给出:
高度图h(x, y)
是函数的一种特殊形式f
:
对于离散化的高度图,假设网格大小为1,上述两个导数项的first-order近似值由下式给出:
因为从 L
到 R
的 x
步骤是 2,y
也是如此。上面正是你的公式,除以4。当这个向量归一化时,4的因子被取消了。
(在写这个答案时没有伤害到线性代数)
我正在尝试使用中心差分将高度图转换为法线矩阵,稍后将对应于给定点的陡度。
我找到了几个结果正确的链接,但没有解释背后的数学原理。
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轴为高度
根据矢量微积分,表面的法线由 梯度运算符给出:
高度图h(x, y)
是函数的一种特殊形式f
:
对于离散化的高度图,假设网格大小为1,上述两个导数项的first-order近似值由下式给出:
因为从 L
到 R
的 x
步骤是 2,y
也是如此。上面正是你的公式,除以4。当这个向量归一化时,4的因子被取消了。
(在写这个答案时没有伤害到线性代数)