摘要:本文首先提出了研究可视化开发平台的目的及重要性,通过了解可视化的相关背景知识,掌握与平台有关的相关接口,对各接口类进行封装,然后将平台与框架相结合,完成可视化开发平台的搭建,最后应用到实际的案例中。
关键词:可视化开发平台;OpenGL;可视化对象;框架
中图分类号:TP391.41 文献标识码:A 文章编号:1007-9599 (2013) 02-0000-02
1 研究背景及目的
图形显示[1]、操作和输出是软件功能的重要组成部分。Direct涉及到的图形显示方式有OpenGL[2]二维显示、OpenGL三维显示、GDI+二维显示等,如果将文件输出也看成在特殊设备上的显示,则还包括Emf输出、文本文件输出等。因此我们把与图形显示相关的功能独立出来作为一个可视化开发的平台为软件的应用提供可视化支持。
2 可视化相关知识背景
可视化平台对使用者需要显示的对象提供可视化的支持,如绘制,空间管理。使用者拥有自己的对象体系,根据自己的数据对象生成相应的可视化对象。这些对象可以看作是用户对象体系的一种末端节点。通常仅作为显示及空间管理之用。不需要保存。与平台接口[3]有关的主要对象如下:
2.1 可视化对象。平台提供常见的基本可视化单元(部件):Path,Text,Mesh…。使用者可以根据自身需要使用多个基本可视化单元复合成更高层次的可视化部件。屏幕上的显示效果取决于显示场景里有哪些可视化对象。一个可视对象如果实现了OpenGL渲染接口,那么它就可以被OpenGL渲染器画出来。可视化对象还会提供 得到OBB,矩阵变换,相交测试等功能接口。
2.2 摄像机对象。可以类比现实中的照相机,用来对准显示场景,确定观察目标与拍摄效果。图形学上用来描述绘图空间里的观察者眼空间。提供世界-局部-眼空间-视图空间等坐标系间的坐标转换和旋转,平移等摆放摄像机的功能接口。各种场景漫游操作的实现最终都是通过摆放摄像机来实现。
2.3 ViewPort对象(视图)。视图是用户观察场景的中介,与一个特定的像素设备的绘制区域相关联。视图内部整合一个摄像机,一个渲染器。使用者不需要关心渲染器,只需要从想要显示的东西生成可视化对象,加入显示场景。
一些特殊目的视图,比如模拟枪口瞄准镜效果,需要自己拥有一些可视化对象,这些对象不属于场景而属于视图自身,从而不会因为场景的共享而在不相关的视图中显示。
2.4 显示场景对象。一组可视化对象的根对象,联系到问题域中涉及的可视化对象。是视图观察的单位。
场景和视图是独立的对象,互相可以建立联系(观察这个场景),也可以断开联系(观察另一个场景)。一个视图只显示一个场景。一个场景可以在不同视图中显示。View Port对象是为场景提供显示服务的,所以概念上场景先于视图。一般情况场景只是引用可视化对象,不负责删除。一个可视化对象可以同时被多个显示场景引用。所以概念上可视化对象先于显示场景。
2.5 空间管理器对象。按照八叉树或四叉树等结构管理空间对象。为场景提供可视对象的空间管理功能,加速绘制、选择等。一个场景拥有一个空间管理器对象。场景可以更换空间管理器对象,提供更有效的空间管理。空间管理器可以回答选中了哪些可视化对象,相应的可视化对象可以回答针对自身的具体选中细节。比如是否选中一个Path可视化对象可以由查询空间管理器得到,选中了该Path的具体部位的信息可以通过调用Path的相应接口函数计算返回。通过在使用者对象和可视化对象之间建立联系,可以得到包含被选中的可视化对象的使用者对象。
3 相关接口的包装
包装类可以和使用者的数据对象在同一个类继承体系里[4]。函数名称为示意性。
(1)ViewPort :View2D,View3D。View2D拥有GDI绘制能力。View3D拥有OpenGL绘制能力。(2)显示场景:Scene3D,Scene2D。Scene3D组织可以用OpenGL渲染的3D,2D可视对象。(3)摄像机:Camera。提供设置,操作摄像机的接口。(4)空间管理器: QuadTree:提供四叉树管理,SpaceManagerOctree提供八叉树管理(5)可视化对象:PathObj,MeshObj,TextObj……。
4 框架与可视化平台的结合
每个视图与一个工作集建立联系,用户通过视图来和这个工作集打交道,工作集概念上先于视图。通常每种视图都有其固定的交互任务,因而不同的视图对应不同类型的节点构成的工作集。如单井视图与三维视图的工作集就明显不同。同种视图的多个实例可以共享同一个工作集,例如三维视图和相应的导航视图。当在其中一个视图中进行修改时,另一个视图也会同步更新。
工作集视图是各种视图的基类,它的派生类可能代表三维视图、底图等,它从命名空间中定义的View Part类派生以便整合到工作台中。交互器分为两类:独立型交互器,对象操作型交互器。前者与当前对象无关,后者属于当前对象。切换当前对象会改变当前可用的对象操作交互器。前者可以挂接到视图上,后者与当前对象有关,与视图无关。
每个视图中包含一个View Port对象用来提供窗口绘制方面的支持,确定了View Port也就是确定了渲染API。包含一个显示场景对象用来提供可视化对象组织。
每种视图都有一个视图对象映射工厂,当用户想在此视图对应的工作集中加入一个专业对象时,视图会首先判断它在工作集中是否存在,如不存在,就请求视图对象映射工厂为其创建一个添加了非专业属性的包装对象,加入工作集。
要添加一种新的专业对象,如果有需要保存的可视化编辑成果,我们需要为其实现相应的可视化成果对象,还需要针对可以显示此对象的视图实现IViewObjectMapFactory中相应代码从专业对象映射到可视化成果。如果只是需要把专业对象显示出来,可以直接映射到相应的可视化对象。
5 可视化开发平台的应用
案例描述:原始数据为三维网格体数据,已经在C#方把其中一个层面做成一个平面成果,现需要在指定的窗体里显示这个平面成果。
假定已有平面成果Grid2DResult。Grid2Dresult需要把自己显示为GDI绘制的2D网格,它需要生成一个可视化平台提供的可视对象Polygon2D,给它设置一个位图刷子,位图根据网格数据和色标生成。在Grid2Dresult中包含相应可视化对象的成员变量:Polygon2D。
假定使用者在自己的项目中用来显示Grid2Dresult的窗体视图:Grid2DView。在Grid2DView中包含相应成员变量:View2D,Scene2D。
参考文献
[1]苏小红.计算机图形学实用教程[M].人民邮电出版社,2010,09,01.
[2](美)希尔,(美)克雷著,胡事民等译.计算机图形学(OpenGL版)[M].清华大学出版社,2009,02,01.
[3]刘琨,同斌.可视化编程应用[M].北京理工大学出版社,2010,09,01.
[4]古志民,孙贤和.并行计算机系统结构与可扩展计算[M].清华大学出版社,2009,10,01.
基金项目:先进塔台视景模拟系统基础理论与关键技术(No.60832011)
本文由王虓宇 王烨 张振华等人通过我们顺利发表在【计算机光盘软件与应用】杂志中,字数:3147,经过作者王虓宇 王烨 张振华同意,为您分享全文,如有疑问,请联系我们!
相关专题:英语翻译 不合格食品召回制度 《计算机光盘软件与应用》相关期刊
推荐期刊: