其实我想大家一开始肯定不明白“根据Mesh生成Cage”所谓何物。让我来慢慢和大家解说吧!
研一结束的第一个暑假,我开始了重心坐标的研究。故事也就是从“Mean Value Coordinates for Closed Trianglar Meshes”开始的。记得当时我完全不知道重心坐标是什么,就连三角形的重心坐标是怎么计算的都忘记了。当时李老师也只是和我解释了论文里面的伪代码,我似懂非懂地开始了重心坐标的编程。
如图所示为基于重心坐标的网格编辑的典型案例:
马模型就是我们的原Mesh,然后生成另一个可以包围住马模型的Mesh,我们把这个新Mesh形象地称为Cage。通过重心坐标,我们可以把对原Mesh的编辑过渡到Cage。也就是说我们编辑Cage的时候,原Mesh会发生相应的变形。
基于重心坐标的网格变形思想起源于Sederbedg的FFD(Free-Form Deformation)技术。FFD已经很成熟了,目前像3ds Max和Maya都有提供了相应的操作。
FFD例子如图所示:
相对于FFD来说,基于重心坐标的变形可以有更多的控制顶点,编辑效果更生动。其次计算更加简单,可以说是对FFD的一个阶段性的突破。
接下来我会解释一下,什么是重心坐标。
重心坐标的概念最早是由Möbius于1827年引入,解释了计算机图形学和几何建模中的一个基本问题——多边形内的任意一点是否可以通过该多边形顶点的线性组合来表示。给定多边形的顶点集合。如果对于任意点都存在使得,其中重心坐标满足。
最简单的例子,对于三角形有:
其中A表示面积。
重心坐标就是v前面的系数。
再回到Mean Value Coordinates(MVC),有了重心坐标以后,我们可以把马模型上的每个点都表示为Cage上的顶点的线性组合。
当对v进行改变以后,p也会根据重心坐标做相应的改变。
好了,上面对重心坐标以及基于重心坐标的网格编辑有了一个大致的了解,接下来我们将讨论如何去计算重心坐标。