基于OpenGL技术的三维建模设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于OpenGL技术的三维建模设计

作者:商立安

来源:《消费导刊·理论版》2008年第16期

[摘要]OpenGL即开放性图形库,它是一种高性能的开放式且功能强大的3D图形库,具有几百个指令和函数。本文讨论了两种将常见三维模型转入OpenGL中实现交互的方法,首先对3DS文件进行分析,然后给出转化的思路。从而将三维建模软件产生的三维模型移植到三维场景中,实现仿真。

[关键词]三维重构 OpenGL 3ds文件

作者简介:商立安(1982-),男,河北省徐水县人,现为江西外语外贸职业学院信息管理系专职教师,助教,研究方向为计算机网络与计算机程序设计。

OpenGL的英文全称是“Open Graphics Library”即“开放的图形程序接口”,因为其良好的可移植性和跨平台性,已逐渐成为高性能图形开发和交互式视景仿真的国际图形标准。它是一种高性能的开放式且功能强大的3D图形库,具有几百个指令和函数。使用这些指令和函数可以构造出高质量的静止物体模型和动态图像,并且可以实现对模型的实时交互操作过程。但是OpenGL中并没有提供建模的高级命令,其实现过程也是通过基本的几何图元点、线和多边形来建立三维立体模型的,过程比较繁琐,编程量较大。

现在有许多优秀的三维建模软件如3DS MAX,AUTOCAD等,都可以根据对象很方便地建立物体模型,且不需要编程便可很直观的构造模型,模型的外观更为精细。在OpenGL中使用三维模型一种比较好的方法是先用三维建模软件建立模型,再把这些模型转入OpenGL程序,对其进行控制。本文主要讨论将三维模型转入OpenGL程序常见的两种方法。

一、模型的三维数据格式

存储三维图形数据的文件格式有很多种,其中比较常见的有: obj格式、3DS格式、WRL 格式等。在本文中以3DS格式为例进行介绍。在将三维模型转入OpenGL之前,首先将三维模型保存为3DS格式。在3DS文件中就保存了所建模型模型的所有三维数据信息,包括模型全部顶点、面、材质、法线和纹理等的数据信息。3DS文件是由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。块的信息类别用ID来标识,块还包含了下一个块的相对位置信息,便于跳转。

二、将模型转入OpenGL程序的两种方法

(一)编写OpenGL程序,将模型转入

将模型转入OpenGL的程序中总共用到3种主要的数据结构:顶点集(Vertices)、多边形列表(PolyList)、和相关三角形列表(CommonTriangleList)。顶点集是顶点及其法向量的列表,多边形中的顶点将用在下标表示,OpenGL将这个数组视为一个顶点数组。这里存储的法向量是每一个顶点的法向量,而不是多边形的法向量。多边形列表包括一些列的材质,一个材质由这样一组属性组成:漫反射颜色、光照度、和纹理映射等。与每一种材质相对应的是一组三角形,每一个三角形由一组三元整数组表示,它们分别是三角形每个顶点在顶点集中的下标。相关三角形列表与顶点集具有相同的大小,它是一个指向多边形列表每一个包括该顶点的三角形的链表。相关三角形列表被用来建立每个顶点的法向量。有了模型各种属性的信息,我们就可以在创立显示列表中根据这些指针变量中存入的相应数据来再现模型。在创建新的显示列表(g1NewList)中,使用glBegin(GL_TRIANGLES)和glEnd ()函数来绘制模型,所有具体属性的绘制均在这两个函数之间实现。对于每一个面的绘制,都是先赋好材质,再定义法线和渲染纹理,这些工作都完成后,就可以通过绘制顶点来绘制面了。程序中判断是否具有纹理部分省略,其实现过程与其它属性类似。然后在需要绘制模型的时候使用函数调用即可。

在OpenGL程序入3DS模型采用了根据3DS文件的数据格式来编写OpenGL程序来读取数据信息,在程序中生成模型的办法,这种方法在操作上实际是比较繁琐的,编程量很大。

(二)运用软件将模型转化为cpp文件,然后转入OpenGL程序

有一些现成的软件可以专门用来转换三维模型。3D Exploration便是其中的一种。3D Exploration也是一种专业的图像技术软件,它可以读入许多建模软件所建的模型文件,并也具有渲染环境和制作动画的功能。

我们使用3D Exploration软件读入模型的3DS文件,通过另存为将其转化成能为OpenGL 所用的cpp文件。这样我们就较轻松的拥有了表示模型各种参数的代码,而不需要自己编写,从而大大减轻了编程的工作量。最终转化后的文件是由大量的浮点数组成,这些浮点数包含了模型面、材质、顶点、法线和纹理等的全部信息,并按照这些属性分类。然后我们在OpenGL 程序中专门定义一个读取模型参数的类,在此类中实现读取相应的浮点数的函数的所有功能,再在主程序中调用。这段代码运行后,这些变量中就会存入对应表示相应属性的数据。最后再编程遍历所有的顶点,法线,纹理,从而生成模型。

通过这种方法实现3DS格式模型的导入,编程简单,但是缺点也很明显,生成的.cpp文件体积较大,无论是存储或传输都很不方便。

将三维模型转入OpenGL程序以实现人机交互控制在工程、游戏等领域有着广泛的应用,特别是随着虚拟现实技术的发展,更显现出它的重要意义和实用价值。本文结合目前的主流技术对三维模型转入OpenGL程序的方式进行了一定的研究和探索。

参考文献

[1]和平鸽工作室编著, OpenGL三维图形系统开发与实用技术(实用技术篇),重庆大学出版社,2003

[2]OpenGL体系结构审核委员会/Dave Shreiner/Mason Woo等编著,OpenGL编程指南(第四版),人民邮电出版社,2005

相关文档
最新文档