基于 OpenGL的虚拟仓库系统的研究
BAIDU_CLB_singleFillSlot("10979"); 论文 关键词:OpenGL 虚拟现实 虚拟仓
库 漫游 ADO
论文摘要:简要介绍了虚拟现实技术及其相关技术的内涵,重点讨论了系统的设计思想
、体系结构、三维模型的构建、ADO连接以及漫游的实现等。
1 虚拟现实技术及其相关技术简介 中国论文联盟 编辑。
随着 计算 机技术的迅速 发展 ,虚拟现实与人们的日常生活 13益密切,已成为当
今计算机界广泛关注的一个热点。虚拟现实技术是一项涉及计算机图形学 、人机交互、
人工智能等学科的综合技术,它的目的是用计算机来生成一个逼真的三维感觉世界,给观
众以如同真实世界的体验。利用这一技术,我们可以足不出户游览风景胜地,可以漫游虚
拟博物馆欣赏文物,可以游览虚拟校园欣赏校园景致等。
Delphi是全新的可视化编程环境,采用了弹性可重复利用的完整的面向对象程序语言
(Object—Oriented Language),是当今世界上最快的编辑器和最为领先的数据库技术。
Delphi不但为 OpenGL渲染函数的调用提供了一个高性能的继承化开发环境
IDE(Integrated Development Environment).而且通过 ADO方式连接 SQL Server 2000
数据库作为后台数据库进行数据调用。
Microsoft SQL Server是一个关系数据库管理系统(RDBMS),可应用于各种专业组织
及专业数据库和政府用开发环境巾。SQL Server 2000在本软件中是作为后台数据库存放
货物仓库的各种规格参数 以备调用 ,Delphi是 通过 ADO (ActiveX DataObjects)方式
与数据库进行连接的,这种连接方式易于使用、高速度、低内存支出和占用磁盘空间较少
。
OpenGL是 Open Graphics Library的缩写,它是 SG1公司开发的一套高性能的图形
处理系统,是图形硬件的软件接口,意为开放的图形库。OpenGL不是编程语言,它是在
Delphi平台上的一组绘图命令的 AP1集合。基于 OpenGL的三维可视化具有建模方便、
实时的三维可视化和高度真实感显示的优越性。
2 程序的实现
2.1 设计思想
虚拟仓库系统以 Delphi 7.0为程序设计平台,以 OpenGL函数库为工具进行图像渲
染,通过 ADO方式连接 SQL Server 2000数据库作为后台数据库进行仓库规格参数的动
态调用,在一个三维可视化的空问中进行货物仓库的立体模拟,用户可以通过操作键盘和
鼠标以第一视角在这个场景中漫游,还可以查看每垛货物箱的各种规格参数。
2.2 体系结构
本系统在结构上可分为 3个模块 :Delphi平台模块、数据库调用模块、OpenGL实现
模块。其中 OpenGL实现模块又可分为 5个子模块:货物仓库库体渲染子模块,货物箱的
渲染与纹理贴图子模块 ,灯管的渲染与光照、材质的处理子模块,货物箱规格参数的中
文输出子模块,鼠标和键盘响应(漫游实现)子模块。虚拟仓库系统的工作流程见图 1。
2.3 ADO连接
系统是通过 ADO(ActiveX Data Objects)方式与 SQL Server2000数据库进行连接的
,主要用到 Delphi的 ADO组件页的 ADOConnection 组件和 ADOQuery 组件。 我们通过
ADOConnection组件连接数据库,通过 ADOQuery组件进行 SQL编程来调用数据库巾的关
于货物仓库的各种参数。
我们用下面的语句调用货物仓库的参数存放到变量 a中,其中 a是用 HuowuStorage
定义的记录类型。
a[i].name:=DataModule1.ADOQuery1.fieldByName(‘货物 名称 ’).asString
; a[i].boxuint:=DataModule1.ADOQuery1.fieldByName(‘单 箱发数’).
aslnteger; I d I.]_boxwidth:=DataModule1.ADOQuery1.fieldByName(‘包装箱
宽 ’).aslnteger;a [j].boxhEight:=DataModule1.ADOQuery1fieldByName(‘包
装箱高 ’).aslnteger; a[j].boxleng【b:=DataModule1.ADOQueryI.
fieldByName(‘包装箱长’).aslnteger。
2.4 三维模型的构建
仓库库体是由若干个四边形组成的,包括墙壁、顶部、地板和若干标准线。仓库的顶
部切面是折线梯形,是由一个个四边形叠上去的。以下是绘制库体顶部最上端部分的程序
段。
glBegin(GL_QUADS):
glNormal3f(O.0,一 1.0,0.O); ,般 置法线方向 glTexCoord2f(0,O); ,
/纹理坐标左下
glVertex3f(一 sw/8,sh+sh,一(i-1)*sYscale); ,,左前 glTexCoord2f(1,0)
: ,/,纹理坐标右下
glVertex3f(一 sw/8,sh+sh,一 i*sYseale): //右前 glTexCoord2f(1,1):
//纹理坐标右上
glVertex3f(sw/8,sh+sh,一 i*sl/scale); //右后 glTexCoord2f(0,1);
,,纹理坐标左上
glVertex3f(sw/8,sh+sh,-(i-1) sl/scale); //左后 glEnd();
转贴于中国论文联盟
BAIDU_CLB_singleFillSlot("10979");
再进行透视投影:gluPerspective(45.0,Width/HEight,1,10 000.0)接着我们
进行货物箱的设置,每个货物箱是由 6个四边形组成的,要对每个四边形进行纹理贴图。
当然在渲染每一垛货物箱时,隐藏在里面的那些表面就不用渲染了,这样可以节省很多时
间,提高效率。
由于要实现每垛货物箱的精确数量,所以使用多重 FOR循环来进行渲染。先绘制整层
的货物箱,再绘制一次剩余后整行的货物箱,最后再绘制二次剩余的几个货物箱。 中国
论文联盟 编辑。
为了便于说明问题,我们举个简单的例子 :若有一垛的箱子数量为 238个,箱子的
长宽高分别为 4,8,4(简化后),根据仓库的参数设置可以推算出这一垛每列箱子数为 9
个,共有整层 6层 .余下 22个在第 7层,在该层上又有整 2行 ,一次剩余标志为 l,
最后还剩 4个货物箱在第 7层的第 3行,二次剩余标志为 l。
2.5 漫游的实现
仓库漫游的实现是通过鼠标和键盘的响应来改变相应的参数,进行视图模型矩阵转换
,通过坐标系的变换来调整观察点的位置或是所渲染模型的位置。可利用下面的函数来实
现。
glRotate(’l’ilt,1,0,0); //围绕 轴顺时针旋转 Tilt度
glRotate(Heading,0,1,0); //围绕 y轴顺时针旋转
Heading度 glTranslatef( ,一 0.5+HeadMovement,Z);/船 轴正方向 前进
(X)单位长度,沿 y轴正方向前进(~0.5+HeadMovement)单位长度,沿 z轴正方向前进
(z)单位长度。漫游实现的基本原理见图 2。
3 结语
本文利用 OpenGL强大的图形功能在货物仓库模拟方面进行了有益尝试 ,在实践中取
得了很好的效果,通过鼠标键盘进行人机交互 ,最终实现了货物仓库的动态可视化。虚
拟现实技术的研究和应用具有极其广阔的前景,在某种意义上说它将改变人们的思维和生
活方式,给人类世界带来难以想象的变化。
参考 文献
[1] Grigore C Burdea,Philippe Coiffet.虚拟现实技术[M].版.北京: 电子
工业 出版社 ,2005.
[2] 和平鸽工作室.OpenGL高级编程与可视化系统开发[M]北京: 中国 水利水电出
版社,2002.
[3] 尚游 ,陈岩涛.OpenGL图形程序设计指南[M].北京:巾国水利水电出版社 ,
2001.
[4] 谢志鹏,陈锻生.用 OpenGL开发三维交互式虚拟场景[J] 计算 机应用,2000,
20(8):38--40. 转贴于中国论文联盟