基于opengl的多轴运动仿真_第1页
基于opengl的多轴运动仿真_第2页
基于opengl的多轴运动仿真_第3页
基于opengl的多轴运动仿真_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于opengl的多轴运动仿真

0生成文件为三维图形,其三维结合的方式确定germ(germ)是美国germ开发的非常优秀的三维图形软件库。其实质是图形和硬件的接口。它提供一系列的三维图形单元、图形变换函数以及外部设备访问函数等,在处理建模、变换、光线、色彩、动画等方面具有很好的性能。OpenGL独立于硬件、窗口系统和操作系统,能在各种平台下工作,许多计算机公司把OpenGL集成到各种窗口和操作系统中。VC++中MFC(微软基础类库)包含了强大的基于Windows的应用框架,提供了丰富的窗口和事件管理函数,利用MFC调用OpenGL函数可以较方便地实现数控铣削材料去除过程的动态仿真。1生成文件后的程序在VC++6.0环境下开发OpenGL应用程序需要解决OpenGL与VC++6.0窗口系统的接口问题,主要是为OpenGL创建适当的渲染描述表(RenderContexts)并设置正确的像素格式。此外还需将OpenGL与VC++6.0事件编程相结合,在VC++6.0事件处理程序中利用OpenGL进行图形绘制。以下是基本步骤:①利用MFCAPPWizard建立一个单文档应用程序框架;②打开资源编辑器对程序界面上的菜单、对话框等资源进行必要的修改;③在程序中包含进OpenGL的头文件和库文件;④利用ClassWizard进行OpenGL所必须的初始化工作,包括设置像素格式、建立渲染描述表以及初始化OpenGL投影观察体系等;⑤根据对程序功能的要求,给视图类和其它类添加具有相应功能的成员函数,并进行相应的事件处理。2刀具扫阶段切削的结果数控铣削材料去除过程动态仿真是通过工件与刀具扫掠体之间的布尔减运算实现的。刀具沿刀位轨迹运动,形成刀具扫掠体,并不断通过执行工件几何体与刀具扫掠体之间的布尔减运算来更新工件几何体,最后形成的工件几何体就表示了切削的结果。仿真过程流程图见图1。2.1利用规则、cpp等格式的生成三维图形OpenGL本身提供了基本的点、线、多边形、三维物体(如球体、锥体、多面体等)及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)的绘制函数。但对于复杂的三维物体,利用OpenGL建模就比较困难了,在这种情况下,可采用下述方法:①利用一定的算法,将其它三维建模软件(如3DMAX,AutoCAD等)创建的模型数据读出来,然后利用这些数据在OpenGL中重新构建三维模型;②利用3DExploration等软件对在建模软件中已建好的模型进行转换,生成.cpp格式的OpenGLcpp代码,这种代码包含了所有关于图形的数据信息,VC++可以直接调用这种代码文件,生成三维图形。本文采用第二种方法来建立工件、刀具的实体模型。2.2该算法2.2.1zmap法佐理基于实体的仿真算法可以提供三维形体最完整的几何和拓扑信息,能够进行准确的过程仿真,但这种方法由于计算量大、效率低,难以实现实时仿真,因此需要采用离散的仿真方法。目前常用的离散仿真方法大致分为两大类:基于图像空间离散法的仿真和基于物体空间离散法的仿真。本文采用一种基于物体空间的离散方法——Z_map算法。具体说来,Z_map方法将工件的z轴可见包络面按xy平面定义域离散为网格,各个网格点对应一个z坐标,相当于用平面内长出的不等长线段来代替曲面,这些线段就称为Z_map法矢。平面网格及其对应的一系列点z坐标组合就是曲面的Z_map表达(见图2),即:{x(i),y(j),z(i,j)}i∈[0,I],j∈[0,J]。其中,I、J为x、y方向网格数。这样,在计算机中可以用一个二维数组来表示Z_map法矢,该数组的两个下标分别对应x、y轴上的I+1、J+1个网格点,数组的各个元素即表示其下标对应的网格点处的Z_map值。网格划分的越小,则仿真精度越高,但同时会影响仿真速度。2.2.2刀具扫掠体构造实际应用中铣刀的形状多种多样,这里假设采用圆角铣刀。图3是圆角铣刀的几何示意图,其中R为刀具半径,r为圆角半径。数控铣削加工中,刀具根据每段NC指令从某一起始位置经某一路径运动到另一位置,在此过程中,刀具在空间扫过了一定的体积,刀具在运动过程中包络的空间形体称为这一段轨迹内的刀具扫掠体。圆弧插补可以近似用一组直线段来代替,因此只考虑刀具做直线进给的情况。刀具沿轴向运动时,扫掠体与刀具实体本身相比,仅在轴向长度上产生变化。构造这种扫掠体与构造刀具实体方法相同。刀具沿直线运动时,扫掠体等效为起点、终点两个刀具实体和全轮廓沿直线轨迹扫掠体的组合。2.2.3平行走刀情况(1)对于一条NC指令,设刀具从起点Ps(xs,ys,zs)运动到终点Pe(xe,ye,ze),计算出刀具扫掠体以及扫掠体在xy面的投影即扫描域。(2)循环扫描工件上的网格点Pw(xw,yw),判断其是否在扫描域内。网格点落在扫描域内的必要条件是:(a)对于垂直走刀情况,需要满足:d=(xe−xw)2+(ye−yw)2−−−−−−−−−−−−−−−−−−−√<R。(b)对于平行走刀情况,需满足:d=|(xe−xs)yw+(ye−ys)xw+(xsye−xeys)|(xe−xs)2+(ye−ys)2√<R。(3)对于落在扫描域内的网格点Pw,zw为其对应的法矢,法矢与刀具扫掠体的交点为z′,比较zw和z′,如果zw>z′,则用z′替换zw,反之则说明刀具没有进行有效切削。(a)垂直走刀时:z′=ze−r×dr2−d2√。(b)平行走刀时:z′=zs−zd+(Dx−M)×ze−zs(xe−xs)2+(ye−ys)2√。上式中的各中间变量由以下式子计算:zd=r-zt。其中,zt为切削点到刀具底端的z向距离。Dx=(xe−xs)(xw−xs)+(ye−ys)(yw−ys)(xe−xs)2+(ye−ys)2√。M=±(r+xd)2−d2−−−−−−−−−−−√。上式中,ze-zs>0时,M为正,ze-zs<0时,M为负。xd=r2−z2d−−−−−−√。3基于时间条件的动画画件设计OpenGL支持双缓冲技术,允许图像平滑切换。要利用双缓冲技术实现仿真过程的动画显示,应完成如下工作:(1)在前述开发环境设置中,设置像素格式(PIXELFORMATDESCRIPTOR)时,缓冲区为双缓冲(PFD_DOUBLEBUFFER)。(2)使用SETTIMER函数创建定时器,设置动画的刷新频率。刷新频率的高低决定动画显示的质量。设置太高,会导致Windows消息或其它应用程序进程不能正常进行,若设置太低,则产生的动画画面容易闪烁。(3)完成所有图形绘制工作,然后调用SwapBuffers交换前后缓冲区。(4)定时器每隔一段时间向窗口发送WM_TIMER消息,在视图的成员函数OnTimer中处理此消息:通过调用Invalidate(FALSE)函数,刷新窗口,返回上一步重绘窗口图形。为了提高动画显示的真实感,还可以通过构造光照环境、设置不同材质、采用纹理贴图和深度缓冲等一系列技术来实现。图4是经

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论