这篇博客介绍了Marching Cube这种用于三角化各类隐式曲面的算法,以及记录了我对应的思考。
背景
游戏《孢子》运用的三角化隐式曲面的算法是Compact Cube算法,然而Compact Cube算法是基于Marching Cube进行的优化算法,所以了解对应的Marching Cube算法是必要的。
Marching Cube算法介绍
总体的Marching Cube算法可以分成两块,一块是根据曲面方程构建出对应的三角形顶点,另一块是构建出对应的点法线。
体素及各顶点的density
如果想要使用Marching Cube算法来构建对应的三角面的话,那么需要使用到体素。
可以想象,针对于一个球面方程:
F(x,y,z)=x2+y2+z2−1=0
在对应的空间中可以散布很多的小立方体栅格。
每个立方体栅格的每个顶点都有对应的Density,根据集合关系可以很方便的推断出:
- 如果一个立方体栅格的每个顶点的Density值都 <0 <script type="math/tex" id="MathJax-Element-2">< 0</script>,那么可以认为这个立方体完全位于曲面的一侧。
- 同样的,如果每个顶点的Density值都 > ,那么可以认为这个立方体完全位于曲面的另一侧。
- 如果有部分顶点值