本节用Visual C++结合OpenGL和3DS MAX完成了一个具有真实感的三维虚拟人脸模型。该模型可以实现如下功能:360°环形可视,绕不同坐标轴旋转,网格/纹理转换,更换纹理,表情变化,模型外观变化等。图11-15是程序运行的界面。图11-16是三维虚拟人脸模型的网格图,与图11-8中的3DS MAX人脸网格模型对比,我们可以看到,在3DS MAX中,网格模型以三角形、四边形等不同多边形构成,而在使用Visual C++编程绘制的模型中,则全部由三角形构成。OpenGL中,对点、线和多边形的定义都是通过对顶点坐标的定义来获得的,而所有的几何物体最终都是按顶点的定义顺序来进行绘制的。绘制模型时,选择绘制三角形是因为三角形是最简单的而且很有规则的图形,也是构成平面时最基础的多边形,易于通过控制顶点来控制三角形的形变,并且同时带动相邻三角形的形状变化,从而改变人脸模型的结构。此外,为了观察方便,使用Visual C++绘制的虚拟人脸模型采用只绘制单面的方法,避免了3DS MAX网格模型同时显示前面和后面的视觉误差。
图11-15 三维虚拟人脸模型运行界面
图11-17是程序运行中有关三维虚拟人表情变化的部分画面。其中,图a是虚拟人的平静状态,图b是高兴时的微笑模样,图c是悲伤时撅起嘴的样子。由于我们在表情合成时采用了特征点变换的方法,所以可以根据改变特征点的位置来“制作”出一些不常出现在人脸面部的特殊表情。例如,图d是左半边脸悲伤撅嘴、右半边脸高兴微笑的复合表情。
图11-16 网格/纹理转换中的网格模型
(www.xing528.com)
图11-17 表情变化
a)平静 b)高兴 c)悲伤 d)复合表情
与表情变化方法类似,可以通过特征点变换对人脸模型进行形变,我们通过改变鼻子的坐标点位置,对人脸模型的鼻子进行了形变,模拟了“匹诺曹”的形象,如图11-18所示,其中,图a是原始人脸模型,图b是鼻子拉伸的效果,图c是夸张的鼻子拉伸效果。
图11-18 模型外观变化
a)原始人脸模型 b)鼻子拉伸 c)夸张的鼻子拉伸效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。