引言
仿真是指利用数学模型对系统在计算机上进行实验研究的过程。仿真技术建立在计算机控制理论和相似原理基础之上,其发展同计算机技术发展密切相关。仿真经历了由数字仿真到可视化仿真等阶段,而可视化仿真是数字模拟与科学计算可视化技术相结合的产物。一般地讲,可视化仿真包括两方面的内容:一是将仿真计算中产生的结果转换为图形和图像形式;二是仿真交互界面可视化。随着仿真技术的发展,可视化仿真实时性要求更加严格,要求不仅能够实时跟踪显示仿真计算结果,而且要求能够对仿真过程进行实时干预。当前国内可视化仿真技术的研究及应用方兴未艾,其显著的特征是实时计算机图形及图像处理。
仿真系统是一个特殊的计算机应用系统,可视化仿真系统除具有传统数字仿真的能力外,还当具有可视交互和动画展示能力[2],据此构造图1所示的可视化仿真系统结构。 (图片)
图1可视化仿真系统体系结构这里将仿真对象工程系统抽象为两套模型,数学模型着重反映系统的特征规律,而形态模型着重反映系统物理构成,此两套模型构成了可视化仿真的核心基础。一般地讲,数学模型由该领域的专家建立,因此本文将重点讨论形态模型建立及可视化仿真软件系统总体构造。
1仿真建模
建模是系统仿真的核心,由于可视化仿真的目标是直观表现系统的动态响应,而形态模型则力争以客观、真实、生动的形式来表现系统的状态与行为。一般情况,系统形态模型包括下列三方面内容:
(1) 系统场景描述:灯光、视点、背景等;
(2) 个体静态描述:几何属性、材质属性、位置属性等;
(3) 个体行为描述:运动规律、力学性能等;
可以看出,要完成建模需要强有力的图形软件及图形技术支持,而图形开放语言PoenGLEY AutoCAD软件与3DS软件为此提供了有力的支持,使在微机上开发可视化仿真软件,尤其实现仿真建模成为现实。
1.1基于OpenGL的形态模型描述
OpenGL是Silicon Graphics公司在工作站上三维图形规范GL的微机板,是一个与硬件无关的图形软件接口,目前已成为高质量三维图形的工业标准[1]。OpenGL提供了基本的三维图形功能:由点线和多边形产生复杂三维实体;三维图形变换;着色、纹理、阴影等真实感处理手段等,完全满足可视化仿真形态模型要求。
进一步分析可知,OpenGL是以表面模型形式表现三维形体的。为了统一模型数据结构形式,所有的复杂模型均以三角形平面片形式来表述,基于此,构造下列三级描述的形态模型。
(1) 基本描述
Point:{x,y,z};
Face:{p1,p2,p3};
规定P1,P2,P3按逆时针方向排列构成三角形,P1P2,P2P3指三角形相邻两边并据此生成三角形片的法向向量N,以决定三角形平面的正反向。
N=P1P2×P2P3
(2) 形体描述
OBJECT={Point-List;
Face-List;
Material-description;
Position-description;
Attributes-description;
}
由此描述系统中个体的几何形态及主要属性规律,为可视仿真提供物质基础。
(3) 系统描述全面描述可视化仿真系统对象,提供完整的场景信息。
System={Light-description;
Viewpoint-description;
Object-List;
}
结合OpenGL标准的特征,材质及灯光描述均是以RGB形式给出;而视点的描述则是给出投影类型(透视或正交投影)以及视见剪载体描述。形体几何描述最终落实到几何离散点的描述。
1.2几何建模器与形体描述
从上述分析可知,可视仿真形态模型的描述当中几何描述是十分繁琐的。这是因为在OpenGL中,实体构造是以三角形平面片形式来表现的,并最终是以表面顶点形式完成,其表现形式如下:
glBegin (GL-TRIANGLES);
glVertex3f (x1,y1,z1);
glVertex3f (x2,y2,z2);
glVertex3f (x3,y3,z3);
glEnd ();
显然这种描述的通用性好,但对于建立稍为复杂的形体模型则工作量繁多,且是困难的(OpenGL并没有形体布尔运算等功能)。作者在系统建立工作过程中,通过探索实践,利用现有成熟的几何建模器帮助,很好地解决了这一问题。
AutoCAD是微机上应用十分广泛地绘图软件,具有模型精度高、建模手段灵活以及接口方便的特征,尤其擅长建立二维的几何模型。3DS软件是微机上三维动画制作软件,但其诸如拉伸、布尔运算等功能为建立三维几何模型提供了有力地支持。由于着眼点不同,其操作精度不够理想。为此,结合AutoCAD与3DS软件的特长,进行交互式几何建模,模型几何信息通过建模器支持的中性文件传递给仿真系统。
2可视化仿真软件设计
2.1软件结构框图
可视化仿真软件的核心是数字模拟,但同时又须具备可视交互与可视化过程展现的特征,还须有实时性的特点。据此,规划如图2所示的软件功能结构。(图片)
图2可视化仿真软件功能结构各模块有较强的独立性,相互之间尽可能以数据信息进行联接,系统实时性在于只要改变系统模型输入,则将产生新的一轮可视化响应。对于一个确定的系统而言,形态模型中除属性部分不确定外,是相对稳定的;而数学模型的变化也仅仅是激励参数的改变,因此在模型交互部分将支持参数的交互编辑。数字模拟是针对系统数学模型的数值求解过程,有许多成熟软件可供调用。图形仿真部分一般包括以三维图形形式表现的系统过程和以二维曲线形式表现的系统性能,成为可视化仿真的重要特征。
2.2OpenGL窗口与Windows窗口的协调
OpenGL作为一个图形软件接口,其优良的三维图形功能为开发可视化仿真应用程序提供了有力的支持,但存在如下问题:
(1) 不提供视窗操作,且OpenGL窗口不能分割,一次只能显示一幅画面;
(2) 不提供用户输入指令,自身无法接受交互输入;
(3) 窗口只能使用OpenGL绘图函数,不能与高级语言绘图函数混合使用。
显然,如何有效地克服上述三个问题,是开发友好的可视化界面必须解决的问题,同时也是实现可视化仿真软件中图形仿真部分功能必须解决的问题。一部分用作 OpenGL窗口,此窗口显示以OpenGL函数表现的三维场景行为;一部分用作高级语言视口,用以显示高级语言函数表现的性能曲线;其余部分则用作进行可视交互。事实上,这三个部分均可看作框架窗口的子窗口,在基于Windows的应用程序中是易于实现的,而这三部分的动作行为则利用Windows时钟事件来驱动协调。事实上,整个仿真过程,包括数字模拟和图形仿真均是以时钟事件来驱动,这样既可满足仿真实时性要求,也可同步协调各部分动作。
3结语
工程系统的计算机仿真,尤其可视化仿真,由于具有成本低、无危险、形象生动的特征,在科学研究及工程实验中有着广阔的应用前景。但由于工程系统及客观对象的多样性,现有成熟的仿真软件并不多见,开发仿真应用程序十分必要。本文研讨了在Windows 95平台上,以OpenGL图形接口作为支持,利用Visual C++编程语言开发可视化仿真软件的有关问题。作者以此指导开发了空气冲击钻钻井工作仿真软件,实践表明,选择的开发平台及开发工具是恰当的,处理问题的方法是有效的。
9/18/2004
|