基于vc和opengl的obj人脸模型的读取与交互操作

基于vc和opengl的obj人脸模型的读取与交互操作

ID:30805091

大小:69.36 KB

页数:10页

时间:2019-01-03

基于vc和opengl的obj人脸模型的读取与交互操作_第1页
基于vc和opengl的obj人脸模型的读取与交互操作_第2页
基于vc和opengl的obj人脸模型的读取与交互操作_第3页
基于vc和opengl的obj人脸模型的读取与交互操作_第4页
基于vc和opengl的obj人脸模型的读取与交互操作_第5页
资源描述:

《基于vc和opengl的obj人脸模型的读取与交互操作》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于VC卄和OpenGL的OBJ人脸模型的读取与交互操作基于0penGL和OBJ模型文件格式的研究,本文实现了在OpenGL中OBJ人脸模型的读取与显示及相关交互操作。重点介绍了OBJ文件的文件格式及如何利用OpenGL来构建模型、绘制模型,同时,利用OpenGL的强大功能来实现三维显示和交互操作,并应用于人体三维建模、地形建模以及虚拟现实等领域。【关键词】三维模型OpenGLOBJ文件1概述OpenGL由SGI公司的IRISGL发展而来。最初IRISGL是个2D函数库,逐渐发展到高级3D编程APR对IRISGL移植性进行了改进便产生了OpenGL,由于OpenGL开放的缘故,得到各大硬件厂

2、商支持,发展很好oOpenGL有两个含义,其一:是一个3D图形编程API,其二:是一个彳亍业标准,使得硬件厂商在OpenGL标准的约束下能够得到很好的支持和发展。OpenGL即开放图形库,是一个开放的三维图形软件接口,以OpenGL为基础的应用程序可能方便地在各个平台间移植;同时,OpenGL可以和VisualC++语言协同工作,对于实现图形算法带来了便捷;并且,OpenGL效率高、便于使用,因此OpenGL得到了广泛的应用。2OEJ文件简介OBJ文件是Alias公司开发的一种三维动画软件的数据输出类型,其定义了对象的几何特性。鉴于其文件结构的简单,因此,应用于应用程序过程中的读取等操作。0

3、BJ3.0E5]格式不仅仅支持多边形、直线、表面,也可以定义自由形态曲线。多边形模型是用点、线、面等基本元素来构造,而自由曲面模型则是使用参数曲面来定义的。下面是某个OBJ模型内容的一小部分:v-0.770000-0.32000017.639999v2.0400000.14000016.400000v0.9900002.20000017.139999vn-0.011452-0.3435590.939061vn0.818583-0.1037640.564938vn0.4261330.4722010.771646从上面展示的数据可知,OBJ文件内容是由一些文本行组成的,每一行文本第一个字都是文件

4、关键字,如"v”、“vn”等等,而后面的数据则是该关键字所表示含义的具体参数。如“v”开头则表示该行描述的是一个顶点向量,即表示该顶点的三维坐标信息。表1列举了主要的关键字及其具体含义。在OBJ文件中,不包含面的颜色定义信息,但是可以引用材质库,其信息是存储在一个后缀是“.nitl”的文件中。关键字“mtllib”即表示材质库。材质库中主要包含材质的漫反射,环境,光泽的RGB的定义值,以及反射,折射,透明度等其他特征。3OBJ文件的读取与交互操作3.1OBJ文件的读取经过对OBJ文件格式的结构熟悉之后,要读取模型,首先需要建立对应的模型数据结构体,如对象顶点的结构体、颜色列表结构体、材质描述

5、结构体、投射投影矩阵等。代码如下:typedefstructtagLOCALSETUP{GLdoublefFovy;GLdoublefZNear;GLdoublefZFar;doublefvView0rg[3];doublefvViewTarg[3];doublefvViewVer[3];GLfloatfvMatAmbient[4];GLfloatfvMatSpecular[4];GLfloatfMatShininess;GLfloatfvMatBaseColor[4];}LOCALSETUP;OBJ文件中存储点向量、法向量、面和纹理的信息及相应的个数定义如下:double(*m_pntOb

6、j)[3];double(*m_nor)[3];int(*m_triObj)[3];float(*m_texCrd)[2];int(*m_texTri);intm_0bjVertexNum;intm_triNum;intm_texCrdNum;对于OBJ文件的读取,定义了LoadObjModel函数:BOOLLoadObjModel(CStringfileName);通过加载LoadObjModel函数,获取顶点、面、法线和纹理相关信息。3.2OBJ模型的显示导入OBJ模型之后,即可利用OpenGL强大的图形输出功能来将OBJ模型显示出来。通过3.1可知,函数LoadObjModel可以获取

7、模型的相关信息,然后构造函数DrawOBJModel来显示模型。具体代码如下所示:(本代码没有加入纹理信息)glBegin(GL_TRIANGLES);for(inti二0;i〈m_triNum;i++){inta,b,c;a二m_tri0bj[i][0];b=m_tri0bj[i][1];c=m_tri0bj[i][2];glNormal3dv(m_nor[a]);glVertex3dv(m_pnt0bj[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。