这篇博客介绍了计算机图形学中的Ear Clipping算法,以及我对其的思考。
背景
偶尔翻出来几个以前的老游戏玩了一下,其中包括了孢子。说实话,以前作为玩家的时候感觉这个游戏也就一般。但是现在作为游戏开发者发现这个游戏涉及到一些很酷的技术,包括自定义的肢体(Skin方面)、动画的泛化(Animation Retargeting方面)以及IK结算的泛化。因此查找了一些这方面的资料,尝试了解一些这方面的知识。
搜索了一些资料之后,决定挨个的去补一补对应的知识点。有些知识点在大学也学过但是记忆已经模糊了,有些则是完全没听过的领域,统一记录下来吧,也当作是对以往的知识点的整理。
这篇博客介绍的就是孢子中使用的用于将自定义肢体模型进行细分化的Ear Clipping算法。
在孢子的开发者博客中提到,在项目开发期,Marching Cube算法仍然处于专利保护期(虽然游戏发行的时候专利已经过期了……),因此开发者决定使用Ear Clipping算法将整个网格进行细分处理。
算法介绍
Ear Clipping算法指的是用于将一个普通多边形拆解为一系列的三角形,这些三角形的顶点都来自原来的普通多边形,如下图:
各类定义
普通多边形的定义
上文提到了普通多边形(Simple polygon),普通多边形定义如下:
- 普通多边形由n个顶点( V0 到 Vn−1 )组成。
- 连续的顶点通过一条边< Vi , Vi+1 >组成, 0≤i≤n−2