一种控制3DS模型的新方法的研究与实现

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

一种控制3DS模型的新方法的研究与实现1
尹士伟1,张光年1,郭新宇2
(1.首都师范大学信息工程学院,北京 100037;2.国家农业信息化工程技术研究中心,北
京 100089)
摘要:针对3DS模型文件在导入时存在尺寸、位置多变的问题进行了改进,提出了对模型进行“规范化”的处理。

通过“规范化”处理可以将各种模型的尺寸和位置进行统一,为后续的调整和控制提供了保证。

然后,实现了一个以3DS模型为基础,基于Visual C++和OpenGL编程平台的三维场景生成系统。

该系统能够动态地将各种3DS模型添加到一个三维场景中,并可以动态调整场景中每个模型的具体参数。

通过在该系统中使用“规范化”的处理,使得对于3DS模型的控制达到了十分理想的效果。

关键字:3DS模型;规范化;Visual C++;OpenGL
中图分类号:TP391 文献标识码: B
Work and implementation on a new controlling method for 3DS models
YIN Shi-wei1,ZHANG Guang-nian1,GUO Xin-yu2
(1.College of Information Engineering,Capital Normal University,Beijing,100037,China;
2.National Engineering Research Center for Information Technology in Agriculture,
100089,Beijing)
【Abstract】Because of the variety of the size and position of 3DS models when importing them,I put forward the normalization processing.Through normalization processing,we can make all the model in a uniform size,and ensure later adjustment and controlling.And then,implement a three dimension scene creating system for 3DS models,which bases on Visual C++ and OpenGL programming platform.This system can import many kinds of 3DS models into a three dimension scene dynamicly,and it can adjust special parameters of each model in the scene.Through the use of normalization in the system,it makes the controlling of 3DS models get a very perfect effect. 【Keywords】3DS models,normalization,Visual C++,OpenGL
引言
3D Studio是Autodesk公司开发的一套用于在微机上制作三维动画的应用程序,它所生成的图形文件格式是3DS文件格式[1]。

目前3DS是一种非常普遍的数据格式,以3DS格式保存的三维图形文件非常丰富。

然而,由于3DS模型是由不同人根据各自不同的需求所创建,因此很难为这些模型设定统一的标准,比如模型的尺寸比例、模型的构建位置等,这就大大增加了控制这些模型的难度。

从文献[2-5]中发现,在这些文献中只是将3DS文件读入预先定义的数据结构里,并没有进行处理而直接使用OpenGL等渲染工具进行显示。

这种方法只适用于一些规范的模型,而对于建模不规范的模型,将会出现模型过大或没有显示在指定窗口范围内等问题。

针对这个问题我提出了对模型数据进行“规范化”处理的方法。

该方法提取3DS模型1基金项目:北京市自然科学基金项目(4042015)和北京市科技新星项目(2003B14)资助
中的关键顶点数据,再利用OpenGL的模型变换矩阵进行变换,将各种3DS模型统一为相同的尺度标准和位置。

之后,将“规范化”处理方法应用于一个场景生成系统中,并执行程序进行了效果测试。

1. 读取3DS模型
3DS模型文件由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。

块的信息类别用ID来标识,块还包含了下一个块的相对位置信息[1]。

当然3DS模型文件中也存在着很多冗余信息,我们只需要读出其中可以使我们能够显示出模型的那些有用的数据即可,其余的均可跳过。

3DS文件的结构在很多参考书和文献中都有介绍,可参见参考文献[1]。

3DS模型文件结构实际上是个树形结构。

根据递归的思想,读取模型文件相应的数据并将其存储在适当的数据结构当中。

由于我们需要对模型进行渲染和显示,因此需要将模型中顶点信息、面的信息以及纹理材质信息进行保存,以便使用OpenGL进行渲染和显示。

存储3DS模型的主要数据结构如图1所示。

图1 存储3DS模型的数据结构
2. “规范化”3DS模型
“规范化”处理的基本思想是:用一个长方体将模型包围,长方体的各个面分别与模型的极值(X、Y、Z方向的最大和最小值)顶点相切,然后求出该长方体的几何中心坐标,将该长方体连同模型平移至坐标原点的位置;求出该长方体的最长边,将该边作为单位边长,模型以此比例进行缩放。

经过上述处理,该模型的外长方体中心必将落在原点,而且该模型也会落在边长为单位1的立方体内。

由上一节可知,在读取3DS模型的数据结构中,模型的顶点坐标专门放在一起,因此这就为规范化操作提供了便利,可以很方便的取出模型的所有坐标。

“规范化”处理的具体算法描述如下:
1.首先定义三个数组,分别用来存放X、Y和Z的坐标;
2.从3DS模型的数据结构中读取所有的顶点的X、Y和Z坐标到相应的数组中;
3.对于顶点的X坐标,从数组中找出其中的最大值(Xmax)和最小值(Xmin);
4.对于顶点的X坐标,计算出最大值和最小值之间的距离,即该模型在X轴方向上的最
大距离,LengthX= Xmax-Xmin;
5.对于顶点的X坐标,计算出模型在X方向上的坐标中心位置,CenterX = (Xmax+Xmin)
/2;
6.对于顶点的Y坐标和Z坐标,分别按照3、4和5的步骤求出Ymax,Ymin,LengthY,
CenterY以及Zmax,Zmin,LengthZ,CenterZ;
7.计算平移量。

根据上述计算的结果,可以确定模型的“中心”位置坐标(CenterX,CenterY,
CenterZ),因此将该模型中心平移到坐标原点的平移量在X,Y,Z方向上分别为-CenterX,-CenterY和-CenterZ。

8.计算缩放量。

根据上述计算的结果,找出LengthX,LengthY和LenghZ中的最大值,记
为LengthMax。

判断LengthMax的值,如果LengthMax<=1,则ScaleX=ScaleY=ScaleZ=1;
如果LengthMax>1,则ScaleX=ScaleY=ScaleZ=1/LengthMax。

9.根据上述缩放量和平移量,对模型进行矩阵变换。

从上面的算法可以发现,由于模型的中心坐标是原始模型的中心,对模型的平移操作应该是在缩放之前进行。

如果在缩放之后进行,模型的中心将可能会发生偏移,因此在对模型进行变换时,需要先进行平移变换,再进行缩放变换。

另外,考虑到OpenGL对于模型矩阵的实现机制——采用栈式存储结构,即后进先出的原则,因此在实际编写程序时,应为如下代码所示:
glScalef(ScaleX,ScaleY,ScaleZ); //对顶点进行缩放变换
glTranslatef(-CenterX,-CenterY,-CenterZ); //对顶点进行平移变换
3. 系统实现
本系统是一个场景生成系统,采用VS2003和OpenGL作为编程平台。

该系统的功能是可以将多个3DS模型组合在一个场景中,并通过对模型的不同变换,生成不同的场景。

系统结构如图2所示:
图2 系统结构图
其中,场景对象视图是一个两级的树结构图,用来显示场景中目前存在的模型对象;对象属性视图显示模型对象的一些标准参数,旋转、平移和缩放参数值,当在场景对象视图选择不同的模型对象时,该视图中的数据将相应的进行变化,此外,当调整模型对象的属性值时,在生成场景视图中模型对象的绘制将根据调整而变化;而生成场景视图则绘制出当前的三维场景图。

4. 系统运行测试
运行程序来生成一个简单的三维场景,来检验“规范化”处理的效果。

1.向场景加入一个草地模型,为该模型起名为“1”,然后选择其对应的3DS模型文
件。

将该模型导入到场景后,根据需要对该模型进行调整,生成如图3(a)的效
果。

2.向场景中继续加入一个车库模型,为该模型起名为“2”,然后选择其对应的3DS
模型文件。

将该模型导入到场景后,根据需要对该模型进行调整,生成如图3(b)的效果。

3.向场景中继续加入一个铲车模型,为该模型起名为“3”,然后选择其对应的3DS
模型文件。

将该模型导入到场景后,根据需要对该模型进行调整,生成如图3(c)的效果。

(a)(b)
(c)
图3 程序运行效果图(a)加入草地模型的执行图,(b)继续加入车库模型的执行图,(c)
继续加入铲车模型的执行图
5. 结论
本文作者创新点:提出了使用“规范化”处理将各种3DS模型统一的方法,该方法从尺寸上,将模型变为一个单位的尺寸,便于后面对模型进行缩放操作;从位置上,将各种模型的外接立方体的几何中心平移到坐标系的原点位置,便于对模型进行平移操作。

由此可见,通过“规范化”处理的3DS模型具备了很好的操控特性,为进一步在三维场景中控制模型、组合模型提供了十分有效的保证。

参考文献
[1] 王柯等.基于3DS模型的虚拟现实系统的设计与实现,阜阳师范学院学报(自然科学版).第23卷第1期.2006,3
[2] 杨帆等.3DS文件格式与自定义文件格式的转换,交通与计算机.2004年第3期
[3] 殷素峰. 在 OpenGL 环境下开发 3DS 文件浏览器,工程图学学报.2005年6月
[4] 王鹏,吴志明. 利用OpenGL与3DS集成技术构建服装CAD的三维人体模型,苏州大学学报(工科版).第25卷第1期.2005年2月
[5] OpenGL三维图形系统开发与使用技术(实用技术篇)和平鸽工作室编著清华大学出
版社重庆大学出版社
[6] 杜霄,唐涛.三维视景仿真中动态模型的建立,微计算机信息,微计算机信息,2006年第1-1期,第248~250页,192页.
作者简介:
尹士伟(1982-),男,北京,硕士研究生,研究方向:虚拟现实与三维可视化。

张光年(1950-),男,副教授,研究方向:数字图像处理和三维可视化。

郭新宇(1973-),男,博士,副研,主要研究方向:农业信息技术。

Author brief introduction:
YIN Shi-wei(1978-),male,Major graduate student, Major in Virtual Reality And 3D visualization. ZHANG Guang-nian(1950-), male, associate professor, Major in digital image processing And 3D visualization. GUO Xin-yu(1973-),male,Doctor,assistant researcher, Major in Agricultural information Technology.
联系人:尹士伟通讯地址: 首都师范大学信息工程学院2004级研究生
Email:shiwei_yin@.。

相关文档
最新文档