陈亚霖
(河南工业大学 网络教育管理中心,河南 郑州 450001)
粮情监控系统是利用现代电子和计算机技术,在粮食储藏过程中实现对粮情的实时检测,将检测数据保存到数据库系统中,进行分析处理,目前主要包括:粮堆温度、湿度、虫害、气体成分等指标的全面监控.从计算机技术的范畴来分析,粮情监控系统[1]分为硬件部分和软件部分.在保障粮食安全的迫切需求下,全国60%以上的中央、省级地方粮库已经配备了自动化的粮情监控系统,中央储备粮库已经全部配备了粮情监控系统.而当前粮情监控系统的软件都是采用传统的菜单、表格和统计图形界面,作者主要探讨虚拟现实技术中的一种用仿3D效果的2D图形技术[2]在粮情监控软件中的应用和实现,从而在计算机上更加真实地呈现粮情监控信息.
虚拟现实技术(Virtual Reality,VR)是一种可以创建和体验虚拟世界的计算机系统.建立一种新的用户界面,用户可以置身于计算机构建的三维环境中,并可以通过眼、手、耳或特殊的空间三维装置在这个环境中漫游.虚拟现实将用户和计算机视为一个整体,通过各种直观的工具将信息进行可视化,形成一个逼真的环境,用户可置身于这种三维的信息空间中自由地使用各种信息,并由此控制计算机[3].本文采用2D图形技术实现3D效果是虚拟现实技术的一种具体实现.
2D图形技术也叫二维图形技术.2D图形内容有水平的X轴向与垂直的Y轴向.最显著的特征是所有图形元素是以平面图片的形式制作,这些图形元素最终都以复杂的联系方式在软件中进行调用而实现虚拟世界中丰富的内容.
3D图形技术也叫三维图形技术.3D图形内容有水平的X轴向与垂直的Y轴向,还有进深的Z轴向.与二维的区别是三维图形可以从各个角度去表现模型,虚拟世界中的每个物体被看作立体的对象,由若干个几何多边体构成.理论上,三维图形的立体感、光影效果要比二维平面图形要好.
Windows API(Application Programming Interface,应用程序编程接口)是用来控制Windows的各个部件的外观和行为的一些预先定义的函数,目的是供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而无需访问资源码,或理解内部工作机制的细节.凡是在Windows工作环境下执行的程序,都可以调用Windows API[4].API函数大致分为6类:基础服务类、公共控件库、图形设备接口、网络服务、用户界面、Windows Shell函数.本文论述的虚拟现实技术在具体程序实现过程中除了文中提及的几个核心的关于图形和文字处理的API函数外,还应用到了大量其他的API函数.API函数与计算机操作系统和硬件系统的逻辑关系见图1.
图1 API函数与计算机系统的逻辑关系
在具体的图形呈现中,为了能够使用二维的图形技术实现三维的效果,经历以下5个步骤.
图2 3D MAX制作生成3D立筒仓模型
为实现逼真的三维效果,首先构建粮仓的3D模型,向粮库或者粮库设计院收集建筑单体及规划的工程图纸,没有工程图纸的可以根据大比例尺航摄相片、地形图文件,将单个建筑物的轮廓线从摄取照片中提取.使用AutoCAD对资料进行校正,用3D MAX制作生成3D粮仓模型[5],如图2所示.为增加模型的逼真效果,把取自实际环境的数码照片作为纹理,要作为纹理的图片长度和宽度像素值均设为2的整数次幂,以保证模型在漫游中纹理不发生扭曲变形.
确定场景角度,使用3D MAX软件,对生成的3D模型进行抓拍图片,图片的背景颜色进行统一处理,使得背景颜色是一个唯一的颜色值.制作成合适大小的图标.本文的粮仓图标大小为20×30(像素),背景图标大小为20×20,办公楼图标的大小为20×20,保存为bmp格式的文件,载入资源文件,供编程调用.
构建粮库场景的配置信息文件Buildings.ini.该文件是对粮库库区内所有主要建筑物单体的配置文件,包括一个粮库库区里面的种类数量,不同建筑物的图形参数配置.每个建筑的相关文字描述,需要的图形资源的资源号等信息等都包含在配置文件中,该配置文件在初始化粮库场景资源时被调用.在一个粮库库区内,一般主要包括小公园、办公楼、粮仓(立筒仓、浅圆仓、平房仓)等建筑物.
单体建筑物的相关信息在粮情监控软件中将被很多地方调用,因而使用面向对象的方法,用cBuilding类封装单体建筑的属性值是一个最佳选择,该类还有效地实现了粮仓建筑信息和屏幕显示资源、鼠标等计算机资源的联系.cBuilding类的属性值主要包括建筑物的主键值、名称、类型、文字描述,生成的建筑物图形在屏幕上显示的鼠标信息和坐标位置信息等.
构建 Render()函数用来实现粮库的图形场景.当建筑物在显示屏幕的坐标范围以内时,依据系统坐标绘制系统建筑,如果某个建筑被鼠标选中,绘制鼠标覆盖时的效果,绘制建筑物相关屏幕提示信息.在屏幕坐标系统中绘制粮库图形场景,主要用到了BitBlt函数、TransparentBlt函数、和TextOut函数等Windows Api函数.
在生成背景图案和单体建筑物时,用到BitBlt函数.这个函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境.
当某个建筑物被鼠标选中,实现不同显示效果时,用到TransparentBlt函数.这个函数对指定的源设备环境中的矩形区域像素的颜色数据进行位块(bit_block)转换,并将结果置于目标设备环境.
在图形环境中所有的静态和动态的文字描述信息都调用TextOut函数.这个函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到屏幕上指定的位置.
Render()函数的程序流程如图3所示.
图3 实现场景显示的程序流程
图4 是一个浅圆仓的库区图形,有道路、办公楼和8个浅圆仓.当鼠标移动到浅圆仓上时,有蓝色光标覆盖在被选定的浅圆仓,鼠标单击该浅圆仓,弹出该仓的基本信息和粮情检测信息.
图4 库区场景软件界面
本文在虚拟现实技术实现方面做出了有益的探索,论述应用2D图像技术实现3D效果的方法,已经在粮情软件的开发中得到了实现,并且投入到实际使用当中.粮情监控软件开发中用到该技术,将极大提高软件的视觉效果,为提升粮情监控软件的整个库区的呈现提供一种有效的方法.
[1] 王立根,王贵甫.粮情测控技术及其发展[J].计算机应用与软件,2010,27(5):152-154.
[2] 徐志强.2D技术在图形编辑中的应用[J].华东冶金学院学报,2000,17(1):46-49.
[3] 祝玉华.三维粮库管理系统的设计与实现[J].华北水利水电学院学报,2011(4):140-142.
[4] 刘炳文.Visual Basic 6.0 Win32 API[M].北京:清华大学出版社,2001.
[5] 张强,陈亚霖.三维设计应用教程[M].郑州:郑州大学出版社,2008.