寻找体素表面法线的方法

4
我正在研究一种近似计算3D体素图像表面法线的方法。 这篇文章中提出的方法(是我在谷歌上找到的唯一算法)似乎可行。该论文建议的方法是找到表面变化最大的方向,使用某些过程在切平面上选择2个点,然后进行叉积运算。作者提供了一些用Pascal编写的代码,其中有葡萄牙语注释来实现此方法。
然而,使用f的梯度(将每个偏导数用作向量的组成部分)作为法线似乎效果很好;我在一个体素化球体上测试了几个圆周,并得到了在大多数地方看起来正确的结果(有一些离群值偏差约为30度)。这与论文中使用的方法非常不同,但它仍然有效。我不明白的是,为什么在物体表面计算的f=1/dist的梯度应该产生法线。

为什么这种程序有效?这只是因为球体测试太特殊了吗?你能否建议一个更简单的方法,或解释其中任何一种方法?


仅仅因为如果表面是由其隐式方程定义的,那么梯度就是法向量 - Dr. belisarius
1个回答

1

在体绘制中,使用体积的梯度作为光照法线是一种标准技术。

如果将体素的值解释为不透明度,则梯度将给出不透明度变化最大的方向,类似于表面法线。


问题在于我没有对图像(1和0)本身取梯度,而是对定义为f=1/dist的函数取梯度,其中dist是我想要法线的点到图像的距离。它们之间有什么联系? - felipeh
如果您只是使用 f = 1/dist,其中 dist 是到点的距离,则法线在点之间应该是相同的。如果您基于体素值进行计算,则类似于对局部区域的梯度乘以球形衰减掩模。 - tkerwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接