基于平均法线实现顶点网格变形控制的总结
顶点网格的变形功能,这在Unity官方商店的技术展示Demo中有一个案例。自己就是在这个案例的基础上进行的学习。案例中的功能全部都是用JS实现的,自己依样画葫芦,改成了C#,并对其中一些核心代码的工作原理进行了分析与学习,最终形成了这篇总结。其中的不正之处欢迎大家批评指出。
看到文章的标题,我们可能会想,要完成网格模型的变形,需要哪几个要素? 简单来说,就是两个:顶点与法线。其中,顶点指的是网格模型的每一个顶点的坐标位置(模型的自身坐标系);法线指的是每一个顶点的法线(表示顶点方向的单位向量)。它们都属于网格模型顶点属性的范畴。有了这两个变形的基本要素,我们便可以开始着手实现模型的变形了。在开始实现以前,先让我们对模型变形的基本套路有个大体了解,这好让我们按图索骥,有的放矢。
当我们在进行网格模型的变形时,通常会按照下面的几步去做:
1、选择触发条件。所谓触发条件,是指触发网格模型变形的前提条件,常用的有物体间的碰撞、鼠标的点击等。
2、进行顶点筛选。在触发条件触发变形后,我们需要进行顶点的筛选。所谓顶点筛选,是指通过设定某些条件,对网格模型的全部顶点进行筛选,从而获取到所有我们需要修改的顶点。这是很重要的一步,这一步的核心是顶点的筛选算法,这个算法要根据不同的筛选条件来确定。
3、计算变化因子。经过顶点的筛选,我们已经知道哪些顶点是需要修改的了。而所谓的变化因子,就是告诉我们,这些顶点要发生怎样的位置变化,要怎样修改。针对需要修改的顶点,选取合适的算法,计算它们各自的变化因子。这同样也是一步核心操作。