初识光线投射的网格模型体素化


看了github上光线投射的体素化应用,记下体会:

我们可以想像:

1、把模型装到一个方形盒子里,我们站在盒子的正前面,把盒子朝着我们的这个面横、竖划很多条线,把它分成一个很多小格子的网格。

2、然后对每个小格子:朝里发射一条光线,显然这时光线的状态是在模型外的。

3、与模型网格碰到以后,把光线状态置为模型内,让光线继续向里前进。

4、再一次碰到模型网格时,把光线状态置为模型外,并把两次碰到之间的距离分成一段一段的,每一段都标记为在模型内。

5、重复3、4步骤,直到光线超出盒子范围都没有碰到模型网格。然后就对下一个小格子又从步骤2开始。

大概就是上面的这几步。这个其实和二维上的判断点在封闭图形的内部还是外部有点像的。

上面提到的光线是否碰到网格,就是光线与三角面求交。而体素标记则可以用一个三维数组来存。

在实际操作中会遇到一个问题:我怎么保证光线碰到的三角面是按从近到远的?不能,所以实际上应该是一次性求出所有的相交三角面,然后按与光源位置从近到远排序。