基于Candide-3的手动特定人脸建模方法设计与实现
1 OpenGL环境设置
1.1 View类中设置OpenGL环境
1InitGL()函数,主要是设置像素格式,创建渲染环境,设置投影矩阵。
2)添加WM_CREATE消息映射,在里面添加InitGL()函数。
m60(3)添加WM_SIZE消息映射,当窗口大小变换时,重新设置投影矩阵。
1.2 View类变量添加和其它一些设置
View类里面添加一些变量,并进行相应初始化。在StdAfx.h中添加相应的头文件:
#include"gl\gl.h"
#include"gl\glu.h"
#include"gl\glaux.h"
相应的目录中应事先存放这些文件。
2模型数据文件添加
添加Candide-3的模型数据文件,该文件名为candide.h,包含两个数组,分别存放Candide-3顶点数据和面片数据。
3模型类的构造
构造一个模型类,提供一些变量,设计时都是开放的,未进行接口设计。模型类的具体设计参见"Model.h"文件。
4 照片类的构造
该类主要是对图像处理为纹理时进行一些纹理环境设置及具体显示,具体参见"FaceImage.h"文件。
5 Doc类中实例化模型
在文档类中添加模型的对象指针,用来保存模型对象,在文档类初始化时实例化该模型对象指针。
6 菜单设计
设计了三个菜单:
(1)Image 图像菜单
---Import 导入图像
---Display 显示图像
(2)Model 模型菜单
哈弗派
  ---Wire 显示线框模型
  ---Real 显示真实感模型
  ---Reset 重置模型
(3)Tool 工具菜单
奥迪a6l汽车  ---Translate 模型移动
  ---Scale 模型缩放汽车打蜡时间
  ---Pick 模型拣选
相应的菜单都对模型类或者图片类中的参数进行设置并激发相关消息,对图形进行绘制。
7工具栏设计成都轮胎
设计了对应Tool菜单的三个相应按钮工具。永安里地铁
8模型操作的设计
View类中添加鼠标事件,响应相应的客户区域的鼠标点击事件,此处主要是WM_LBUTTONDOWNWM_LBUTTONUPWM_MOUSEMOVE这三个鼠标事件,下面对各个操作的具体设计进行说明。
8.1模型移动
在按下左键后纪录按键位置,在鼠标移动事件中处理移动距离,然后计算到模型中去,鼠标左键释放事件中作相应善后处理。
8.2模型缩放
在按下左键后纪录按键位置,在鼠标移动事件中处理移动距离,然后计算到模型中去,鼠标左键释放事件中作相应善后处理。
8.3模型旋转
ResourceViewAccelerator中添加VK_UPVK_DOWNVK_LEFTVK_RIGHTG这几个键及其相应的相应函数。
8.4模型点拣选与控制
模型点的拣选与控制涉及到OpenGL中的拣选和反馈,需用到拣选和反馈机制,设置具体的拣选和反馈。此处主要在View类中添加了Selection()函数,用作拣选反馈。
9说明
本示例程序仅供交流学习之用,如需用作其他用途,请务必与作者联系并作说明。
由于时间设计较为仓促,程序在面向对象方面的设计考虑不多,主要目的是供作此研究者一个参考,程序设计方面仍有待完善,对发现错误或者有可改进之处,欢迎批评指正。