基于OpenGL立体车库三维仿真系统实现.docx
《基于OpenGL立体车库三维仿真系统实现.docx》由会员分享,可在线阅读,更多相关《基于OpenGL立体车库三维仿真系统实现.docx(10页珍藏版)》请在冰豆网上搜索。
基于OpenGL立体车库三维仿真系统实现
本文介绍的仿真系统与上位机以交互方式利用OpenGL技术模拟仿真车辆入库、出库流程,通过对车辆、停车设备的动态跟踪产生仿真结果,有利于提高立体停车库的设计水平和计算机监控系统的设计水平,在立体车库计算机仿真领域做出了有益的尝试。
1OpenGL的功能和特点
OpenGL(OpenGraphicsLibrary是美国高级图形及高性能计算机系统公司(SGI开发的一套三维图形库。
它广泛适用于计算机系统环境下的三维图形应用程序设计接口,目前以成为开放式的国际三维图形程序标准。
其本身与硬件和操作系统以及窗口系统的底层软件无关。
作为图形硬件的软件接口,OpenGL由几百个指令或函数组成,这些指令允许用户对二维或三维几何对象进行说明,允许用户对对象实施操作以便把对象渲染(Render到帧缓存(FrameBuffer。
它具有强大的三维建模功能及帧缓存动画技术,使动态仿真过程呈现三维立体显示。
如图1所示,OpenGL指令的解释模型是客户-服务器模式,即客户(用OpenGL指令进行绘制工作的应用程序向服务器(OpenGL内核发布命令,这些OpenGL命令是由服务器解释执行的。
客户和服务器可以运行在同一台计算机上,也可以运行在网络环境下的不同计算
机上。
OpenGL库的函数被
封装在Opengl32.dll动态
链接库中,从客户应用程序
发布的对OpenGL函数的
调用首先被Opengl32.dll
处理,再传递给服务器被
Winsrv.dll进一步进行处理,
然后传递给DDI,最后传递
给视频显示驱动程序。
2建立立体停车库仿真系统平台
本系统以HPCompaqDX2390台式机作为开发设备,使用OpenGL图形库及Win32SDK作为主要开发程序库,在Mi-crosoft公司的开发工具VisualStudio2005下进行仿真系统的开发。
2.1硬件部分
立体停车库的三
维仿真系统由三台计
算机组成,如图2所
示。
控制计算机:
用于
运行立体停车库管理
系统软件,其对下位机
及设备运行状态的获
取和控制是通过西门子
OPC控件对PLC数据的采集及更新得以实现。
该软件曾应用于哈尔滨某小区车库实际工程项目中,其源代码不需做任何改动即可在这套仿真演示系统中实现实时控制动画演示的功能。
图形仿真计算机:
用于运行立体停车库三维动画演示程序,该程序模拟PLC对控制计算机发出的指令进行实时响应,并仿真设备的具体动作和工作状态,并将状态信息反馈给控制计算机,实现在实时控制下的立体停车库入库、出库流程的动态仿真演示。
数据转发计算机:
该计算机通过西门子OPC控件将控制计算机对PLC更新的数据读取入缓冲区,并使用UDP协议通过网络转发给图形仿真计算机,实现数据的实时转发与传递;并通过与上述过程相逆的操作将图形仿真计算机的反馈信息转发给控制计算机。
2.2软件部分
开发环境:
本仿真系统使用C++语言在VisualStudio2005环境下进行开发,VisualStudio2005是Microsoft公司推出的新一代集成开发环境,包含了许多强大的工具,支持多种编程语言(C#、VB、C++、HTML与JavaScript等。
图形库:
OpenGL开放式三维图形库,它集成了曲线造型、图形变换、光照、材质、纹理、像素操作、融合、反走样、雾化等复
基于OpenGL的立体车库三维仿真系统实现
奚俊峰(兰州交通大学机电技术研究所,甘肃兰州730070ImplementDesignSimulationofThreeDimensionGarageBasedonOpenGL
摘要
搭建了基于OpenGL图形库及UDP协议的软硬件仿真平台,分析了系统中的双缓存技术、三维模型读取、模型数据驱动、可变视点等关键技术,设计了立体停车库可视化仿真系统。
该系统实现了模拟仿真立体车库出入库三维场景,设备运行效率统计等功能。
关键词:
OpenGL,三维仿真,立体停车库
Abstract
ThispaperdiscussestheconstructionofsimulationsystemplatformwhichbasedongraphiclibraryofOpenGLandUDPprotocol,describingthekeytechnologyusedsuchasdoublebuffer,reading3Dmodel,data-drivemodel,perspectiveprojection,andbuildthesimulationsystemofparkinggarage.Thesystemrealizesthefunctionssimulatingthesceneofgarageoperation,illustratingstatisticoftheequipmentoperation.
Keywords:
OpenGL,three-dimensionanimation,three-dimension
garage
图1OpenGL在Windows
系统中的工作流程
图2
立体车库仿真系统硬件组成
基于OpenGL的立体车库三维仿真系统实现
12
《工业控制计算机》2010年第23卷第6
期杂的计算机图形学算法。
标准模板库:
STL(StandardTemplateLibrary,它通过模板技术封装了一些复杂而常用的数据结构,并在这些容器的基础上提供了如遍历、查找、比较、排序等常用的算法和函数,在极大的提高代码的重用性和便捷性的同时又保证了程序的性能。
本软件中在虚拟场景对象管理、事物处理和协议解析的代码中广泛使用了STL技术。
3关键技术3.1双缓存技术
为了生成平滑的动画,OpenGL采用了双缓存技术,双缓存即前台缓存和后台缓存,后台缓存在前台缓存内容中一帧画面被显示时,计算坐标、渲染场景、生成下一帧画面,当完整的画面在后台缓存中画出后,调用SwapBuffers(函数使其由前台缓存显示。
前台缓存的图像显示一定时间后,然后提供完全绘制好的下一幅图像,并显示相同时间,如此循环。
从而增强了立体车库动画演示的连续感和运动感。
3.2模型的建立及显示
由于本三维仿真系统涉及到立体车库、车辆、设备等的模型比较复杂,因此先用3dsMax软件进行建立模型,然后导出为
3DS模型文件,最后在程序中读入模型数据文件并显示的方法
来完成建模过程。
3dsMax软件是AutoDesk公司公司开发的三维动画软
件,建立模型后可以导出为3DS格式的数据文件。
3DS文件由许多块(chuck组成,块是由块信息和块数据组成,块信息的前两项分别为块的ID和块的长度,块内包含里下一个块的相对位
置,这样就可以递归的读取出所有的模型数据。
读入3DS模型的数据实际是构成模型的若干三角形顶点的空间位置坐标、法线向量、纹理坐标等数据,通过如下
OpenGL指令即可将模型在视口中显示出来:
glBegin(GL_POLYGON;
glNormal3f(...;\\法线向量
glTexCoord2f(...;\\纹理坐标
glVertex3f(...;\\顶点坐标
......glEnd(;
通过这样的方法将模型数据读取并显示出来,同时能够反映出模型的材质和贴图效果,生动再现立体车库及车辆设备等构成的虚拟场景。
读取并显示的车辆模型如图3所示。
3.3模型的数据驱动
场景中的模型运动,如
车辆的行进、转弯和立体车库内举升设备的运动等,可以使用
OpenGL中的平移函数glTranslate(和旋转函数glRotate(操
纵,通过矩阵运算来实现。
glTranslate(x,y,z函数产生矩阵T,与绘制对象的齐次顶点v相乘得到经平移变换后的顶点坐标,如式(1所示:
glTranslate(θ,x,y,z产生一个可以绕(x,y,z任意轴旋转角度θ的矩阵R,矩阵:
T·ν=100x010y001z000
00000
0000
1xkykzk00
w
(1
R与绘制对象的齐次顶点v相乘得到经平移变换后的顶点
坐标,如下所示:
绕x轴的旋转变换矩阵R如式(2所示:
R·ν=10000cosθ-sinθ0
0sinθ-cosθ00000
0000
0000
1xk
ykzk00
w
(2
绕y轴的旋转变换矩阵R如式(3所示:
R·ν=cosθ0sinθ00100-sinθ0cosθ00000
0000000001xkykzk00w(3
绕z轴的旋转变换矩阵R如式(4所示:
00
01xkykzk00w(4
3.4可变视点设计
在执行立体车库入库及出库视景仿真的过程中,作为模拟用户视角的虚拟摄像机在场景中漫游,观察机械设备及举升机构动作,使观察者产生身临其境的感受,是使用了OpenGL中的透视投影技术:
gluPerspective(fovy,as,Near,Far
该函数定义了透视可视区域为一个平截头体,它的参数是垂直方向的视野角度、高度到宽度的纵横比,以及近端和远端裁剪平面之间的距离,如图4所示。
图4
由gluPerspective定义的视景体
首先,视景平截头体定义了视野的范围,即组成四棱台的六个面范围内的空间才能被看见,其余的将被剪裁面剪切掉。
其次,在三维模型空间向二维显示空间转换的过程中,视景体实现了透视投影功能,即“近大远小”的视觉感受。
视点的实时变化用到的另一个函数:
gluLookAt(eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz;
其中:
eyex,eyey,eyez—观察者的空间位置;
centerx,centery,centerz—目标视点的空间位置;upx,upy,upz—观察者向上方的向量。
在虚拟场景中根据举升设备及车辆位置,调用上述函数改变摄像机的位置实现随动观察、场景漫游及全场景俯瞰等效果
。
图3
读取3DS模型数据并在
程序中显示
图5
举升机械设备运行状态三维仿真
13
(上接第11页
EndSub
时间代码为[=″今天是″&YEAR(TODAY(&″年″&MONTH(TODAY(&″月″&DAY(TODAY(&″日″&″星期″&TEXT(TODAY(,″aaa″]
3.2数据检索界面设计
通过点击图3界面中的“查询数据”按钮得到用ExcelVBA设计的检索界面(图4,在检索界面中按工作要求输入查询的时间等操作后点击“检索数据”,得到历史报表(如图5所示。
在检索窗口中(图4。
由于要使操作的方便等原因,所以使其中的一些按钮设置为不可见。
只留下输入检索时间等几个必要的按钮。
得到的历史数据可以通过Excel来方便操作。
图4检索界面
3.3数据检索结果
通过以上操作得到的数据报表如(图5所示,这个Excel报表就可以方便用户保存,查询检索了。
而且还可以通过在(图4中可以再设置一些功能按钮所需要的按钮来打开其他的Sheet报表。
在得到历史报表以后通过点击图标可以方便的返回到图3主界面。
这样使数据监控系统更具有友好性。
图5历史报表
4结束语
通过ExcelVBA对组态王的二次开发运用。
提高了组态王监控系统的控制功能。
同时利用VBA的监控系统设计方便用户选择打开不同的报表。
工程试验标明:
系统更加友好,操作更加方便。
组态王和ExcelVBA相结合可以方便的进行工业控制和数据查询。
此系统通过通信连网,可以远程的来通过Excel来操作上位机。
本监控系统设计方法在南京陶吴增压站工程项目中取得了良好的效果。
参考文献
2008
[2]伍云辉.ExcelVBA应用高效开发[M].北京:
电子工业出版社,2007
]4系统实现的功能
本文介绍的基于
OpenGL的立体停车库
仿真系统实现了在上位
机立体车库管理系统软
件的指令控制下模拟车
辆出入库过程中举升机
构和机械设备的运行场
景,如图5所示。
该系统在立体停车
库的仿真实践中较好的
实现了动态实时跟踪、控
制指令的反馈和状态信息的生成。
通过对设备运行参数的设置
(如图6所示能够模拟真实情况下立体停车库系统的运行状
况,并实时记录控制指令传递流程及机械设备的运行时间,如图
7所示。
5结束语
该系统通过对实时仿真环境中车库设备运行状态的观察能
够对上位机监控系统软件车辆存取算法的效果进行验证;通过
对设备运行时间的统计,可以找到系统运行中的性能瓶颈。
可据
此实现对立体停车库项目方案的可行性及能否达到设计目标进
行评定,为立体车库项目的方案论证和设计提供了一定的技术
依据。
参考文献
[1]DaveShreiner,MasonWoo,JackieNeider,TomDavis.
OpenGLProgrammingGuide[M]Addison-WesleyPublishing
Company2008
[2]RichardWright,JrBenjaminLipchark.OpenGLSuperBible
[M].WaiteGroupPress2005
[3]张正波,牟彦,黄华,等.OPENGL实现3ds文件中模型自由旋转
[J].计算机工程与应用,2004(8
[4]CharlesPetzlod.ProgrammingWindows[M].MicrosoftPress
2000
[5]徐明亮,卢红星,王琬.OpenGL游戏编程[M].北京:
机械工业出版
社,2008
]
图6
设备参数设置界面
图7系统运行效率统计
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
基于OpenGL的立体车库三维仿真系统实现14