您的当前位置:首页正文

三维场景图形建模和场景对象管理方法

2020-11-23 来源:独旅网
维普资讯 http://www.cqvip.com 第6期(总第145期) 机械工程与自动化 NO.6 2007年12月 MECHANICAL ENGlNEERING & AU I‘0MAT10N Dec. 文章编号:1672—6413(2007)06—0031—03 三维场景图形建模和场景对象管理方法 曾晓芳,肖世德,余晓明 (西南交通大学,四川 成都 610031) 摘要:图形建模是三维场景仿真中的重要环节,结合在列车虚拟运行场景仿真中的具体运用,详细阐述了图形 建模的多种方法和原理,并给出了场景对象管理的有效方法。 关键词:OpenGL;图形建模;场景对象管理 中图分类号:TP391.41 文献标识码:A 0 引言 维实体的组合。本设计中除前面提到的房屋、隧道以 随着虚拟现实技术的发展,越来越多的系统通过 外,天空也可视为由平面组合而成的方盒,车站可视 构造三维场景来表现和模拟真实的环境。在三维场景 为由柱体、长方体、曲面等简单图形拼合而成。对这 的仿真过程中,首先要对各场景对象进行图形建模,还 类场景物体的建模可直接应用OpenGI 相应绘图函 要对其进行有效管理。在列车虚拟运行场景的仿真中, 数得到各图形单元,再利用OpenGL坐标转换函数 需要对列车主要部件、铁路线路及各景观进行构造。本 glTranslatef*、glRotatef*、glScalef*将图形单元组 文结合列车运行场景的仿真,在图形建模和场景对象 合成更复杂的场景物体。图1是车站站台的效果图。 管理方面阐述了生成实时逼真三维场景的方法。 1图形建模 图形模型的构造是OpenGI 一切后续处理的基 础,也是三维场景仿真设计的基础。三维场景仿真过 程中首先需要对各物体进行图形建模,也就是在不考 虑物体表面细节的情况下,根据仿真设计的具体需要 将物体的几何特征抽象化(物体的表面细节可通过纹 理贴图技术完成)。不同的物体抽象出来的几何特征复 杂度不同,在本设计中对于房屋建筑物、隧道等抽象 图l车站站台的效果图 为平面多边形和简单曲面的组合,而对于转向架、地 1.2三维模型导入 形等复杂实体就很难用简单平面、曲面或基本三维实 对于三维场景中一些比较复杂的模型,由于其几 体描绘,这时就需要根据不同的几何特征采用不同的 何结构的复杂性,运用OpenGI 绘制相当困难。这时 建模方法。本文在列车运行三维场景仿真中将图形建 可在其它三维软件如3I)SMAx中完成模型的构造, 模分以下三种情况考虑。 再通过编写相应读取函数将模型导人到OpenGI 编 1.1 简单建模 程环境下。另外,也可直接通过第三方小软件如 OpenGI 提供了对基本的点、线段、多边形的绘制 View3DS方便快捷地完成模型的导人。本设计中的转 函数;在辅助库中,OpenGI 还提供了绘制球体、圆锥 向架是应用后一种方法完成的,其实现步骤如下: 等规则三维物体的函数;此外,OpenGI 也给出了构建 首先在3DSMAX中完成转向架模型的构建,并 NURRS、BIZER曲线和曲面的高级绘制函数。三维场 保存为ZhuanXJ.3ds格式;通过View3DS导人模型 景中大部分物体可抽象为平面多边形、曲面、规则三 并生成与模型名同名的ZhuanXJ.h和ZhuanXJ.gl文 收稿日期:2007—03—30;修回日期:2007—07—30 作者简介:曾晓芳(1981一),女,四川筒阳人,硕士研究生。 维普资讯 http://www.cqvip.com

・32・ 机械工程与自动化 2007年第6期 件,将两 、文件拷贝到当前工程目录中.在考U始化函 数Init中加入“Model—GI 3DS initialize—ZhuanXJ ()”,GI 3DS initialize—ZhuanXJ()函数应用显示列表 凸的高低,将位图保存为长宽为2的幂,如64×64。 (2)渎取位图颜色值。由于Windows位图的颜色 是BGR顺序存储的,在存储颜色数值之前,需要将B 技术完成了转向架的绘制。其定义在文件ZhuanXJ.h 中给出;最后在绘制函数中采用glCall[ ist(Mode1)程 值和R值交换,使颜色存储顺序为RGB顺序。其关键 程序如下: //实现各像素中R、B成分的交换 for(Index一0:lndex<CbitmaplnfoHeader— ̄>biSizelmage; Index+一3) 序完成整个转向架的导人和绘制工作。 1.3特殊建模 1.3.1地形的生成 在三维场景的仿真中,地形模拟是其中重要的环 节之一,常用的地形建模方法有真实地形和模拟地形 两种。真实地形一般采用数字高程模型(Digital Elevation Model,VEM)方法,这种方法生成的地形真 { tempRGB=bitImage[I【ldex]; bitlmage[Index]=bitlmage[Index-k23; bitlmage[Index+2]--_tempRGB; ) 实度高,但数据结构复杂,数据获取费用昂贵,图形 生成速度慢。模拟地形一般采用随机生成地形或采用 分形法生成地形,这两种方法生成速度快,但很难生 成用户需要的地形特征。 鉴于以上各种地形建模的优缺点,本文采用基于 (3)建立颜色值与高程的对应关系,求出各网格 点三维坐标值,用OpenGI 绘图函数绘出三维地形。 主要程序如下: for(int z一0:z<MAP…Z;Z++) { for(int X-二0;X<MAP—X;x++) 位图颜色值生成地形高程的建模方法。首先获取一张 用颜色代表高程的地形图(这里采用黑白颜色描绘的 位图),用经纬度线将地形图网格化,并获取对应网格 { g—terrain[x-kMAP~z*z]EO2=float(x)*MAP—SCALE; //建立颜色值与高程值的对应关系 点的颜色值,其中经纬度是因变量,颜色值随经纬度 的变化而变化;各网格点颜色值获取后可根据函数关 g—terrainIx+MAP~z*z]E1]一(float)(g~imageDataE(z*MAP~z+ x)*3]~g—imageData[0]); g terrain[x+MAP~z*z][2]=float(z)*MAP—SCALE; } ) 系式计算出相应高程值,经纬度线用 、z坐标值表 示,高程值用Y坐标值表示,(z,Y,z)即为各网格点坐 标值;求出各网格值(z,Y,z),即获得了地形各网格点 (4)加入光照模型、纹理细节等,使三维地形更 逼真。 图2是应用基于位图颜色值生成的海域地形图 三维坐标值,应用OpenGL绘图函数将各网格点用三 角面片连接起来可得到二维地形位图对应的三维地 形。该方法生成速度快,而且可以根据用户对地形特 (图2(b)、2(c)J3n人了简单桥梁)。图2(a)是黑白位图, 图2(b)是图2(a)对应的地形图,图2(c)是加入了海 征的要求生成各种三维地形。具体实现步骤如下: (1)用Photoshop等绘图软件绘制一幅黑白位 图,其中黑的程度代表地形凹的深浅,白的程度代表 水纹理后的海域图。同样,其它如丘陵、大山等地形 也可应用该方法生成。只需要绘制不同的黑白位图,贴 上相应的纹理即可。  . .置 ; _ _ _ _ ?■ ■ (a)64X64位圆 (b)地形图 f c)海域 图2基于位图颜色值生成的海域地形图 1.3.2透明贴图法建模 所谓透明贴图法就是只将一幅图中需要的部分重 叠到背景图像上。它应用RGBA颜色模式中的Alpha 通道(Alpha值表示不透明度),通过进行Alpha测试 在三维场景建模过程中,还有一种特殊的建模方 法——透明贴图法建模。在列车运行场景仿真中,树 木、雪花的建模可以通过将处理后的位图贴到相应的 平面上来完成。 来确定接受或放弃一个片段值。其具体实现的方法是: 首先为一幅图的不同部分设置不同的Alpha值,为方 维普资讯 http://www.cqvip.com

2007年第6期 曾晓芳,等:三维场景图形建模和场帚对象管理方法 ・33・ 便起见用Photoshop等绘图软件将图中不需要的部分 运行场景仿真系统中,将各种线路和地形场景组合构 描成单一颜色,并将其Alpha值设为0(表示透明),将 成多种场景模块.这些模块也就是用来构成列车运行 图中需要的部分的Alpha值设为1(表示不透明);再 场景的场景对象.整个场景由场景对象链式连接而成。 用glAlpha()函数设置Alpha测试条件;最后利用 用户可任意铺设场景,系统记录下每一场景对象的相 Alpha信息、深度信息、场景和绘制条件等进行处理, 关信息,如每个场景对象起点坐标、方位等,随着列 最终将需要部分显现出来。以下是给位图设置不同 车的运行,系统可通过判断各场景对象与视点的距离 Alpha值的关键程序: 来确定是否绘出该场景(视点可在列车附近漫游)。远 for(unsigned int sr ̄一0,dst一0;src<bitmaplnfoHeader一> 离视点位置的场景对象将被淘汰。由于各场景对象可 biSizeImage;src+一3,dst+=4) 近似为在一个平面上,测试球可进一步简化为水平的 { 测试圆。很显然,场景对象淘汰可提高仿真的实时性, //如果颜色值是黑色的(0,0.O).将Alpha值设为0;否则Alpha 改进渲染性能。 值设为255。 3 总结 jf(bjtmap1mage[src]一=o&g bitmapImage[src+1]=一O&&bitmapImage[src+2]一一o) ()penGI 作为一个性能优越的图形应用程序设计 bitmapWithAlpha[dst+3]一0; 界面,已成为目前的三维图形开发标准,能实现高性 else 能的三维绘图功能。本文在VC++6.0/WindowsXP环 bitmapWithAlpha[dst+3]=0xFF; 境下,以OpenGI 作为三维绘图工具,完成了对列车 bitmapWithAlpha[dst]一bitmapImage[src]; 运行场景的生成和管理。图4为截取的部分列车运行 bitmapWithAlpha[dst+1]一bitmapImage[src+1]; 三维场景效果图。 bitmapWithAlpha[dst+2]一bitmapImage[sre+2]; ) 图3是用透明贴图法生成的列车头(正面观看)、 树木(应用十字交叉法)的效果图。 )列车通过海域 (b)列车通过丘陵 图4 列车运行三维场景效果图 参考文献: [1]潇湘工作室.OpenGL超级宝典[M].北京:人民邮电出版 图3列车头、树木的效果图 社,2001. 2场景对象管理 [2] 和平鸽工作室.OpenGL高级编程与可视化系统开发 三维场景往往由多个对象组成,当对象数目很多 [M].北京:中国水利水电出版社,2003. 时,如果每一帧都将所有场景对象绘出,这势必会影 [3]范乃梅,熊坤.基于OpenGL的三维地形的生成与简化 响整个场景的渲染速度。如果能够以某种方式确定哪 [J].郑州轻工业学院学报(自然科学版),2006(5):84—87. 些模型看不到,不把它们发送到OpenGI ,就能节省大 [42 吕希奎,韩峰.韩春华.线路三维仿真系统中对称物的简 量的处理时间。本设计以视点为中心设置了一个测试 化绘制方法口].兰州交通大学学报(自然科学版),2004 (6):3O一33. 球体,场景在球体内则绘出,否则淘汰。在列车虚拟 GraphiC Modeling of 3D Scene and Method of Model Management Based on OpenGL ZENG Xiao-fang.XIAO Shi—de,YU Xiao-ming (Southwest Jiaotong University,Chengdu 610031,China) Abstract:In the 3D scene simulation,graphic modeling is the prime part.In this paper,the 3D scene simulation of train movement is taken as an example tO present the methods and principles of graphic modeling.This paper has also given a valid way of managing 3D scene models. Key words:OpenGI ;graphic modeling;model management 

因篇幅问题不能全部显示,请点此查看更多更全内容