




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用面向对象的方法实现3D S 文件的读取与操纵*王益群1,2,黄 诚31南京工业大学信息科学与工程学院,江苏南京 210009;2盐城工学院计算机科学技术系,江苏盐城 224003;3上海盛大网络发展有限公司,上海 =%&201203摘 要:介绍了利用面向对象的程序设计方法实现了3D S 文件的读取。与面向过程的方法比较,面向对象方法对于理解3D S 文件的读取、重绘及控制显得条理清晰,易于掌握,同时又方便移植到其它应用程序中。基于这一点,提出了将3D S 文件的读取工作封装在一个类中,从而提高了程序的可读性。关键词:面向对象;O pe n G L ;3D MA X ;法向量中图分类号
2、: 文献标识码:A 文章编号:1671-5322(200503-0041-04 随着计算机技术的飞速发展,计算机动画、科学计算可视化和虚拟现实逐渐成为计算机图形学领域中三大重要技术,而三维图形又是这三大技术的核心内容1。三维图形现在已广泛应用于建筑学、医学、C A D /C AM /C A E 、分子结构研究、模拟仿真、虚拟现实、广告业和娱乐业等诸多领域2,编程实现3D S 文件的读取、重绘及控制具有重要意义。传统的基于过程的设计方法,由于相关函数多而且散杂同时数据又与函数分离,导致不便于程序的移植。为了克服这些缺点,本文采用了面向对象的程序设计方法,将3D S 文件的形体数据读入到类中,然后
3、由其成员函数利用O pe n G L 实现对3D S 文件的读取、重绘及操纵。1 3D S 文件结构及O pe n G L 简介目前三维图形制作软件很多,如A u t o C A D 、U G 、3D MA X 、W a v e f r o n t 等,因而其文件格式非常丰富。3D S t u d i o 是A u t o d e s k 公司开发的一套在微机上制作三维动画的应用程序。本文利用由该软件产生的三维图形文件为例来实现三维图形的读取、操纵与控制。3D S 文件由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。块的信息类别用I D 来标识,块还包含了下一个块的相对位置信息。因
4、此,即使不理解一个块的含义,也可以很容易地跳过它。要想对3D S 文件的读写有一个明确的认识,必须准确知道它的含义。O pe n G L 全称为“开放式图形库”,是由S G I 公司开发的三维图形A P I ,目前在图形开发领域已经成为工业标准;是国际上通用的图形硬件的软件接口,独立于操作系统和硬件环境,是一个完全可移植并且速度很快的3D 图形建模库3。但O pe n G L 没有提供三维模型的高级命令,它是与通过基本的几何图元即点、线及多边形来建立三维模型的。目前有许多的三维图形软件如3D S MA X ,A U T O C A D ,可以方便地建立物体模型,但又难以对其进行控制,比如3D
5、S MA X 的动画是基于关键帧而不是人机交互的。把这些模型转换成O p e n G L 程序,再对其进行控制则是一种比较理想的方法。在建模阶段可以利用三维软件建立模型,避免在O pe n G L 中用点、线和多边形来建立三维立体模型的繁重的劳动;在控制阶段,则可以通过O pe n G L 程序实现对模型的人机交互调整,从而可以随心所欲地利用现成的模型实现第18卷第3期2005年9月盐城工学院学报(自然科学版J o u r n a l o fY a n c h e n g I n s t i t u t e o fT e c h n o l o g y(N a t u r a l S c i
6、e n c e V o l .18N o .3J u n .2005*收稿日期:2005- -作者简介:王益群(1978-,男,江苏建湖人,南京工业大学硕士研究生,高级程序员,研究方向:计算机应用技术。虚拟现实。2实现方法462.1文件内容的读取2.1.1数据说明在文件读取前,首先需要定义一系列的结构用来存放3D数据,如对象的材质、位置矢量、对象类(C T r i O b j e c t和对象列表类(C T r i L i s t等,下面对两个重要的类作简单说明:(1C T r i O b j e c t类:主要用于处理3D S文件中的各种对象。c l a s sC T r i O b j e
7、 c tp u b l i c:v o i dd r a w G L(:/利用O p e n G L绘画三角形v o i d c a l N o r m a l s(;/计算法向量.P r i v a t e:/对象基本的成员变量f l o a t*x;f l o a t*y;f l o a t*z;/三角形的顶点f l o a t*n x;f l o a t*n y;f l o a t*n z;/面的法向量i n t*f a c e s;/面信息t M a t e r i a l*m a t e r i a l s;/材质信息.;(2C t r i L i s t类:用于处理对象序列,它是C
8、 T r i-O b j e c t的集合,保存了三维模型的形体数据。c l a s sC T r i L i s tp u b l i c:v o i dd r a w G L(;/绘制3D模型B O O La d d(C T r i O b j e c t*_o b j e c t;/增加对象.p r i v a t e:i n tn u m o b j e c t s;/C T r i O b j e c t对象的数目C T r i O b j e c t*o b j e c t s100;2.1.2对象的读取文件的读取工作实质上是如何构造C T r i L i s t 列表,也就是如何
9、从3D S文件中读取数据来构造C T r i O b j e c t对象,然后再组织到C t r i L i s t列表中。文件的读取主要包括循环读取3D对象所使用的材质,形体数据以及关键帧数据等,同时忽略其它一些不需要的数据,这一切都是通过C3D S R e a d e r类来实现的。(1C3D S R e a d e r类的简单说明c l a s sC3d s Re a d e rp u b l i c:i n tR e a d K F D A T A(.;/读取关键帧数据i n t R e a d3D S C h u n k(.;/读取3D S块结构i n tR e a d P o i
10、n t A r r a y(.;/读取顶点数据i n tR e a d F a c e A r r a y(.;/读取面数据i n tR e a d M e s h M a t G r o u p(.;/读取对象所用的材质i n tR e a d T r i O b j e c t(.;/读入对象数据i n tR e a d M a t E n t r y(.;/读入材质定义,并将其添加到材质库中i n tR e a d M D A T A(.;/读取3D 对象模型数据i n tR e a d3D S F i l e(.;/读取3D S 文件.p r i v a t e:C T r i L i
11、 s t*D a L i s t;/此链表用于存放形体对象数据;(2读取的过程i n t C3d s R e a d e r:R e a d3D S F i l e(l o n g f i l e S i z e, l o n g f i l e S t a r t,l o n g f i l e L e n,F I L E*f pl o n g c h u n k S t a r t=f t e l l(f p;C h u n k3D S c h u n k;M a t e r i a l D i c t*m a t d i c t=n e w M a t e r i a l-D i c t
12、(;u n s i g n e d l o n g v e r s i o n;w h i l e(c h u n k S t a r t(f i l e S t a r t+f i l e L e n &&R e a d3D S C h u n k(f p,c h u n k·24·盐城工学院学报(自然科学版第18卷s w i t c h(c h u n k.i dc a s eM3D_V E R S I O N:i f(!R e a d U L o n g(f p,v e r s i o ng o t o e r r o r;b r e a k;c a
13、s eM D A T A:i f(!R e a d M D A T A(m a t d i c t,f i l e S i z e, c h u n k S t a r t,c h u n k.l e n,f pg o t o e r r o r;b r e a k;c a s eK F D A T A:i f(!R e a d K F D A T A(f i l e S i z e,c h u n k-S t a r t,c h u n k.l e n,f pg o t o e r r o r;b r e a k;d e f a u l t:/忽略一些不需要的块f s e e k(f p,c
14、 h u n k S t a r t+c h u n k.l e n, S E E K_S E T;c h u n k S t a r t=f t e l l(f p;i f(m a t d i c t!=N U L Ld e l e t em a t d i c t;r e t u r nT R U E;e r r o r:i f(m a t d i c t!=N U L Ld e l e t e m a t-d i c t;r e t u r nF A L S E;2.2计算法向量在将3D S文件读取后,就可以计算各个面的方向矢量。法线矢量指定哪个方向垂直于多边形表面,用于光线和阴影计算。
15、它与实体的光照模型密切相关,光线从不同入射角度到模型表面时,显示结果会有差别。如果忽略了法向量的计算,将不能重现模型的三维效果。v o i d C T r i O b j e c t:C a l c N o r m a l(i n te n t r y,f l o a t o u t3f l o a t v13,v23;/根据空间三个点计算两个矢量值v10=xf a c e se n t r y-xf a c e se n t r y +1;v11=yf a c e se n t r y-yf a c e se n t r y +1;v12=zf a c e se n t r y-zf a c
16、 e se n t r y +1;v20=xf a c e se n t r y+1-xf a c e s e n t r y+2;v21=yf a c e se n t r y+1-yf a c e s e n t r y+2;v22=zf a c e se n t r y+1-zf a c e s e n t r y+2;/计算法向矢量o u t0=v11*v22-v12*v21;o u t1=v12*v20-v10*v22;o u t2=v10*v21-v11*v20; 2.33D对象的绘制读取了模型数据,计算了法向量后,就可以在V C+6.0中重绘模型,下面分三步进行:(1处理O n
17、C r e a t e事件,在视图文件中初始化O p e n G L绘图环境。该程序中将设置像素格式并创建O p e n G L绘制描述表等,而只有创建了O p e n G L绘制描述表和设置了像素格式后, O p e n G L的绘制命令才有效。同时还对O p e n G L 的一些默认属性进行了一些设置,如绘图模式、光照及材质属性等。(2处理O n S i z e事件,当窗口大小发生改变时,为了避免比例失调,需要对视口和显示比例进行一些调整,用g l V i e w p o r t函数指定视口矩形,用g l u P e r s p e c t i v e函指定仰角、宽高比和深度裁剪值。(3
18、处理O n P a n i t事件,这是重绘工作的最后一步了。当读入3D S文件后,由O n P a i n t函数来重画。该事件处理程序是所有O p e n G L绘制程序的真正源头,所有绘制命令都直接或间接地由该函数调用。绘制时是通过每一个C T r i O b j e c t 对象调用成员函数C T r i O b j e c t:d r a w G L(绘制每一个对象,从而在窗口中绘制出3D图形。其中绘制函数如下:v o i dC T r i O b j e c t:d r a w G L(i n t j;g l B e g i n(G L_T R I A N G L E S;f o
19、r(i=0;i(n u m f a c e s/3;i+j=3*i;i f(m a t e r i a l s a p p l i e dg l C o l o r4f(m a t e r i a l s m a t f a c e si.d i f f u s e C o l o r0,m a t e r i a l sm a t-·34·第3期王益群等:用面向对象的方法实现3D S文件的读取与操纵f a c e s i .d i f f u s e C o l o r 1,m a t e r i a l s m a t f a c e s i .d i f f u s
20、e C o l o r 2,1/m a t e r i a l s m a t f a c e s i .t r a n s p a r e n c y ;e l s e g l C o l o r 3f (0.0f ,0.0f ,1.0f ;:gl N o r m a l 3f (n x i ,n y i ,n z i ;:g l V e r t e x 3f (x f a c e s j ,y f a c e s j ,z f a c e s j ;:g l V e r t e x 3f (x f a c e s j +1,y f a c e s j +1,z f a c e s j +1
21、;:g l V e r t e x 3f (x f a c e s j +2,y f a c e s j +2,z f a c e s j +2;gl E n d (;g l P o p M a t r i x (;3 结束语本文主要讲述了结合面向对象和O p e n G L 在V C +6.0环境下实现三维图像的读取,并在窗口中重绘。通过对本方法的了解,可以使用O pe n G L 的基本操作,来实现对3D S 文件随心所欲的控制。把3D MA X 模型应用于O p e n G L 中,降低了O p e n G L 复杂建模的难度,可以得到较真实的复杂物体模型。在飞行运动模拟的具体应用中,利
22、用在O p e n G L 程序中引入3D MA X 各种模型,得到了满意的三维动画效果。同样,我们还可以编写A u t o C A D 、U G 等多种图形接口程序,把在A u t o C A D 、U G 等C A D 软件中建立的物体模型引入O p e n G L 的应用程序中,将可应用于飞行模拟、运动虚拟仿真、商业广告、游戏制作、影视采集、内装饰系统设计、服装设计等多个领域。使用现成的3D S 文件,可以节省大量的重复且繁重的劳动,极大地提高了工作效率。参考文献:1孙波.O pe n G L 编程实例学习教程M .北京:北京大学出版社,2000.2王莹莹.在V C 中利用O p e n
23、 G L 实现动态效果图像的技巧J .微型电脑应用,2002,18(6:50-52.3王雪莉,李宗民.V i s u a l C +下O p e n G L 开发框架与应用J .电脑学习,2004,(5:34-36.4郭景,雷鸣.3D S MA X 模型在O P E N G L 中的读取与重现J .自动化与仪表,2002,17(5:46-49.5R i c h a r dS .W r i g h t ,J r .M i c h a e l S w e e t .O p e n G L 超级宝典M .北京:人民邮电出版社,2003.6和平鸽工作室.O pe n G L 高级编程与可视化系统开发M
24、 .北京:中国水利水电出版社,2001.T h eA c c e s s t o 3D SF i l e s b yt h eM e t h o d o f O b j e c tO r i e n t e dP r o g r a m m i n g a n d i t sO pe r a t i o n WA N G Y i -q u n 1,2,HU A N GC h e n g31.C o l l e g e o f I n f o r m a t i o nS c i e n c e a n dE n g i n e e r i n g ,N a n j i n g U n i v
25、e r s i t y o fT e c h n o l o g y ,J i a n g s uN a n j i n g 210009,C h i n a ;2.D e p a r t m e n t o f C o m p u t e r S c i e n c e a n dT e c h n o l o g y ,Y a n c h e n g I n s t i t u t e o fT e c h n o l o g y ,J i a n g s uY a n c h e n g 224003,C h i n a ;3.S h a n g h a i S h a n D aN e t w o r k i n g D e v e l o p m e n t L i m i t e dC o m p a n y ,S h a n g h a i 201203,=%&C h i n a A b s t r a c t :I n t h i s p a p e r ,t h e r e i sam e t h o do f o b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 模流分析考试及答案
- 儿科试题及答案
- 批判现实主义科学课件
- 扭矩扳手检定规程课件
- 2025年高级钳工考试题目及答案
- 旧厂房加固施工组织设计(苏州项目)
- 厦门辅警考试题库
- 情景交际引荐与介绍课件
- 数学考试销售题库及答案
- 恐龙绘画课件
- 《小学语文课程与教学论》复习题
- 2022年08月安徽省芜湖市招考大学生科技特派员岗位冲刺题(带答案)
- 国家城镇救援队伍能力建设与分级测评指南
- DB32∕T 4065-2021 建筑幕墙工程技术标准
- 施工现场环保工作措施
- 资产清查服务方案模版
- 部编版五年级语文上册(精美)课件 2 落花生
- 检具设计PPT.
- 二年级上册表内乘法口算练习
- 物业公司员工绩效考核表
- SAP BASIS 日常维护手册
评论
0/150
提交评论