第19卷第4期郑州工业高等专科学校学报2003年12月V ol.19 N o.4JOURNA L OF ZHE NG ZH OU PO LY TECH NIC I NSTIT UTE Dec.2003收稿日期:2003-09-09作者简介:徐忠杰(1972—),男,河南郑州人,郑州燃气股份有限公司,主要从事设备管理。
基于OpenG L 的3D 仿真图形设计徐忠杰1,徐回忆2(1.郑州燃气股份有限公司,河南郑州 450052; 2.郑州工业高等专科学校,河南郑州 450007)摘要: 介绍了Windows 环境下基于VC6.0的OpenG L 的车床的3D 的图形仿真技术,并简要地给出了车床的仿真程序设计步骤和例程的执行结果。
关键词:OpenG L 仿真;Visual C ++6.0;图形设计中图分类号:TP391.9文献标识码:B 文章编号:1008-7419(2003)04-0017-03图形制作和显示一直是计算机的一大课题。
图形在军事、航天、航空、医学、广告、仿真、虚拟现实等领域的应用越来越广泛。
特别是在教学和一些课题设计中,由于设备制造的费用很高,所以图形的仿真就显得很重要。
目前很多的绘图软件,如:2C A D 、3DMax 、PhotoShop 等,虽然可以很容易地建立模型,但它们画出的图形很难控制,无法实现动态模拟。
OpenG L 突破了这种限制,可以方便地实现图形的动态模拟,并且可以构成组态软件。
下面以CK 0630车床仿真为例,对其核心技术作一简单介绍。
1 OpenG L 介绍OpenG L 是一种硬件和图形的软件接口,实际上就是一个三维图形模型库。
它在三维的真实感图形制作中有着优越的性能。
另外,OpenG L 自身也是一个API ,它是一个和软件无关的编程接口,而且可以在不同的软件平台(例如VB ,VC 等)上方便地移植。
由于OpenG L 可以在不同的硬件平台上编程,所以它不但没有包含处理窗口的命令,而且也不包含三维造型的高级命令,但它可以通过基本的几何图元———点、线、多边形来建立物体模型,并且它可以随心所欲地控制物体模型、制作C AD 、制作三维动画、实现虚拟仿真、制作商业广告、进行影视采辑,这些都使我们制作三维图形更方便、更真实。
2 建立车床图形仿真的数学模型车床是一个运动相对复杂的机械设备,它由四个部分组成:床身、主轴箱、回转刀架、进给系统,它的运动主要有:主轴的正反向旋转,回转刀架90度连续旋转,进给系统X 、Y 方向上的连续移动。
由于OpenG L 没有与车床相应的图形库,所以必须自己动手构建车床的图形。
下面,以建立一个六面体为例,介绍一下图形数据模型的建立方法。
2.1 六面体数据模型建立由于OpenG L 在生成面的时候,必须保证每个顶点在同一水平面上,在测量时很难达到要求的精度,所以必须用表面三角形法生成平面,即由三个顶点生成三角形,再由2个三角形组成一个四边形,以保证四边形的生成。
如图1所示,8个顶点就可以确定一个六面体形状,而12个三角形可组成六面体表面。
图1 六面体的物体模型综上所述,如果想把一个六面体用数学的形式表达出来,就应该首先建立顶点三维数组,然后再以顶点数组的元素组成三角形,并给出每个三角形的法向量。
一个六面体顶点数组有8个元素,存储8个顶点坐标。
表面三角形是四维数组,存储构成三角形的三个顶点和法向量。
据此建立的六面体数据模型如图2所示。
图2 六面体的数据模型在程序中,为了显示直观,可把主轴作为一个八面体来绘制。
2.2 车床图形数据模型首先,我把机床分成四个部分:床身、主轴箱、回转刀架、进给系统,把每个部分分成多个面,然后分别测量每个面的顶点坐标和法向量。
接下来建立顶点数组,存储每个顶点的三维坐标。
然后建立表面三角形数组,存储每个表面三角形的三个顶点在顶点数组中的位置和该三角形的表面法向量。
最后建立多面体数组,存储构成车床每个部分的三角形在表面三角形数组中的位置。
这样在程序中,就可以根据每个部分所对应的多面体数组,绘出它们的图形,从而绘制出机床的图形。
3 车床的3D 图形仿真程序设计本程序是以VC6.0为编译平台,实现了车床的图形仿真,程序绘出了车床主要部件,用户可以通过键盘对它的主要运动部件进行操作,模拟车床加工过程中的各种运动,并可从不同的视角进行观察。
具体的设计步骤如下:(1)运行VC6.0,打开菜单〈File 〉,选择〈New 〉,在出现的New 对话框中,输入程序名my opengl 选择〈Project W orkspace 〉,单击〈OK 〉按钮打开〈New Project W orkspace 〉对话框,选择程序类型为MFC AppWiz 2ard 。
打击Create 按钮,在以下的选项中选择默认。
(2)设置设备的点格式。
设备的点格式指定了设备的绘制性质,例如,点是用RG BA 模式还是使用颜色索引表模式,显示是采用单缓存还是双缓存等。
点格式是由结构PIXE LFORMAT DESCRIPT OR 来描述的。
打开主菜单〈View 〉,选择〈ClassWizard 〉打开MFC ClassWizard 对话框,双击W M -CRE ATE ,增加消息函数OnCreate ()。
在OnCreate ()中初始化设备的点格式,代码如下:PIXE LFORMAT DESCRIPT OR pfd ={Sizeof (PIXE LFORMAT DESCRIPT OR ),//结构pfd 的大小1,//设备号PFD-DRAW -T O-WI NDOW|//支持Windows PFD-S UPPORD-OPE NG L|//支持Opengl PFD-DOUBLE BUFFER ,//支持双缓存PFD-TY PE -RG BA ,//RG BA 模式24,//24色 ……}(3)建立翻译描述表。
在OnCreate ()函数中,在点格式设置代码的后面添加以下代码:CclientDC clientdc (this );Intpf =ChoosePixelF ormat (clientdc.m -hDC ,&pd f );BOO L rt =SetPiexlF ormat (clientdc.m -hDC , pf ,&pdf );Hglrc =wglCreateC ontext (clientdc.m -hDC );(4)使用设备翻译描述表。
在OnDraw ()函数的//T ODO 处添加一行代码:wglWakeCurrent (pDC ->m -hDC ,hglrc );(5)添加绘图函数。
在ClassView 窗口,选择my 2openglView ,单击右键,选择Add Member Fuction ,增加MyDraw 函数。
在my openglView.h 中,在“public :”后面定义各个机床部件的位置偏置变量和旋转角度变量。
在函数绘制时,把各个顶点坐标加入偏置变量。
(6)添加键盘消息函数OnChar ()。
步骤如添加OnCrerte (),双击W M -CH AR ,建立OnChar ()。
在函数中,判断键盘输入,调用各个按键的响应函数。
(7)添加各个按键的函数。
添加方法如MyDraw ()。
每个消息函数对应一个部件的运动,在函数中对该部件的偏置变量(如步骤5所述)进行加1和减1运算,并利用Invalidate (FA LSE )调用OnDraw ()函数,重画图形。
(8)绘制图形。
在OnDraw ()函数中调用MyDraw ()。
(9)加入OpenG L 静态库。
单击〈Project 〉菜单中的〈setting..〉命令,打开Project setting 对话框,单击〈link 〉属性页,在Object/library m odules 编辑框中加入下面三个静态库:opengl32.lib 、glu32.lib 和glaux.lib 。
并在my openglView.cpp 的头文件中加入下面三行代码:#include “gl \gl.h ”#include “gl \gl.h ”・81・ 郑州工业高等专科学校学报 2003年 第19卷 #include “gl \glaux.h”图3 车床模型4 运行程序联编运行my opengl 程序,图3是执行程序的车床图形仿真结果,它是一个色彩绚丽的三维图形,可以通过键盘对它进行控制。
W 键和S 键可以实现图形的缩放,A 键和D 键可以实现图形的左右移动,另外也可以通过键盘实现进给系统在Z 轴和X 轴在正、反两个方向上的移动、主轴的加减速、卡盘的加紧和松开、刀架的自动换刀,还可以通过“↓”、“↑”、“←”、“→”健控制车床的翻转,以便对它从不同的视角进行观察。
5 结束语由于VC ++拥有强大的功能,基于VC ++的OpenG L 编程,可以实现复杂现实世界的虚拟仿真,比如:机器人,自动生产流水线,柔性制造系统,模具设计等。
同时也可以利用VC ++的通讯功能,实现上述系统的在线仿真,从而实现对它们的在线监控,克服了现在的监控软件只有二维场景的缺点。
参考文献:[1] 清汉计算机工作室.VC6.0多媒体技术制作[M].北京:机械工业出版社,1998.[2] K ate G reg ory.前导工作室.VC6.0入门与提高[M].北京:机械工业出版社,1996.[3] 白燕斌.OpenG L 三维图形库编程指南[M].北京:机械工业出版社,1998.[4] 李 微.OpenG L 3D 入门与提高.西南交通大学出版社,1998.The 3D G raphics Simulation DesiginB ased on the Open G LXu Zhongjie ,Xu Huiyi(上接第10页)列表,只有储存在这个过滤列表中的组地址才能够被传递通过。
这个过滤列表的功能可以在用软件编程时自动赋予,也可以通过手工修改的办法进行编辑。
除了过滤的作用之外,线路耦合器同时还起到监视、计数等作用。
7 EI B 系统在智能化建筑中的应用EI B 系统的应用领域可主要分为两大块:商用建筑和住宅建筑。
在楼宇自动化(BA )领域,它比较适用于一些智能化的办公楼、各种会议中心、体育场馆等;在家庭自动化(H A )领域中,EI B 技术可以在一套住宅中实现多种功能,做到家庭电器系统及插座配电系统的智能化,防盗、防火、安保智能化,适应家电网络化和家电控制智能化的趋势。
在住宅内设置EI B 按钮开关,通过手控或遥控对住宅的各类照明灯光进行开关或调光调制,控制方式灵活多样,可依照用户的要求自由地进行组合和调控。
通过控制插座达到安全和节能的作用。