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