汽车三维仿真模型交互显示模拟拆装系统的关键技术

更新时间:2024-04-20 作者:用户投稿原创标记本站原创 点赞:12820 浏览:49528

【摘 要】文中针对目前主要由于汽车结构复杂,平面图形难以显示、学生学习比较困难等问题,提出了汽车三维仿真模型交互显示及模拟拆装系统以提高学生的学习效果,并对系统结构、关键技术、系统集成等核心问题进行了研究.

【关 键 词 】汽车三维仿真模型 交互式 显示 Cult3D OpenGL

【中图分类号】TP391 【文献标识码】A 【文章编号】1674-4810(2013)35-0050-02

一、开发汽车结构与操作综合演示系统的意义

通过汽车结构的教学和各个结构模型的开发和演示,可清楚地了解汽车内在部位的结构和作用,使学生更快地掌握各种军用汽车的专业知识.通过三维结构模型的交互演示、动画演示和模拟拆装等多种形式对军用汽车各结构进行模拟显示、拆解、装配、调整和故障诊断,从而可以使受训人员快速掌握各种军用汽车的基本结构、各结构的调整和维护保养方法,以及各结构在调整保养中应注意的实际问题,从而提高受训人员的基本操作能力,最终提高我军汽车运输车队的运输效能.

二、汽车三维仿真模型交互显示及模拟拆装系统的设计方法

采用软件编程和动画制作、图像处理等相结合的方法进行系统开发.本系统在系统开发过程中主要使用的应用软件有:VC++编程软件、director多媒体制作软件、图形处理与制作软件PhotoShop、三维模型制作软件3DAX等.每个汽车系列主要内容包括:汽车基本结构三维模型交互显示、基本总成拆装仿真、基本原理演示讲解、常见故障原因分析及故障诊断、基本参数查询等五个模块.在每一个模块中均采用模型设计、图片显示、动画演示等形式进行综合演示.比如,对于汽车的某个基本结构,可进行基本结构立体模型的建立,然后采用图片的整体演示和局部演示,模型基本结构组成演示,模型基本结构组成演示又可通过动画形式进行分解、拆装等演示(可分步进行演示),达到图文并茂、条理清晰,从而使受训人员一目了然,更易接受.

在进行汽车三维仿真模型交互显示及模拟拆装系统的设计时,其设计思路为:(1)首先用Pro/E建立汽车各种结构的三维模型,并导出为STL格式的模型;(2)把STL格式的模型导入到3DAX进行贴图、渲染和动画制作,并导出为C3D格式的三维模型;(3)把C3D格式的三维模型导入到Cult3D进行交互处理;(4)在VC++中实现对3DAX构造OpenGL模型的控制;(5)用VC++、OpenGL等软件开发出三维模型文件嵌入控件,用于三维模型在多媒体显示软件的嵌入式和交互式显示.

三、汽车三维仿真模型交互显示及模拟拆装系统的关键技术研究

1.三维模型的交互式处理

所有的建模都有不同的应用领域软件,而虚拟模型要解决两个关键问题,即模型转换和几何模型的建立.在汽车零部件三维模型的建立方面,专业三维造型软件3DAX或Pro/E以它强大的建模和材质贴图渲染功能占据着得天独厚的优势.在汽车结构建模设计中,首先用Pro/E建立汽车各种结构的三维模型,并导出为STL格式的模型并保存;然后将STL格式的三维模型导入到3DAX进行贴图、渲染和动画制作,并导出为C3D格式的三维模型;然后将渲染好的C3D格式的三维模型导入到Cult3D中.导入之前,需要安装插件Cuh3D Exporter for 3DAX,此输出插件支持从主流动画制作媒体中将模型文件导出为Cult3D中间文件格式.这样,3DMAX就能将3D模型输出成Cult3D Design的C3D格式.将三维软件中输出的C3D格式文件置入到专业的3DVR软件中进行场景设置、交互编辑以及在需要说明的地方加入文字介绍等,这样就可输出具有交互功能的三维模型了.


在交互性能的实现上,Cult3D采用基于Ja的内核,不但可以直接在Cult3D Designer中完成基本的交互动态展示,还可以通过Cult3D API开发程序,利用JaScript进行编译,并将它应用于Cuh3D对象,使用户可以利用熟悉的多媒体用户界面,例如按钮和下拉列表框控制Cult3D对象的外观和行为.使用户通过鼠标拖拽对象,从不同角度真实地了解到汽车三维模型的外形、结构和功能,甚至更换汽车三维模型的颜色、纹理,甚至将其组合或拆分,大大丰富了三维浏览时的交互效果.具体流程见图1.

2.在VC++中实现对3DAX构造OpenGL模型的控制

3D设计的最复杂而最费时的工作是构造3D模型.OpenGL没有提供高级命令函数来定义复杂的三维形体,只提供了基本的点、线和多边形方式构造3D模型.如何利用一些优秀的商用建模软件.例如,3DAX、AutoCAD等来构造3D模型,在OpenGL中加以采用并进行实时控制一直是困扰程序员的难题.下面就相关问题的解决方法加以说明.

第一,用3DAX修改、渲染模型并转换文件.在3DAX中修改、渲染模型以后,保存文件名后缀为.max的文件,然后用3D Exploration进行转换,可以选择Simple App、Data Only和Display List 三个选项之一:Simple App生成一个OpenGL的简单应用;Data Only只生成OpenGL像素数据;Display List生成OpenGL的显示列表;选择一个选项即可.为了不同的应用,可以生成包括一个实体的法向量、材质、纹理等多种应用,将文件名后缀为.max的文件保存为cpp OpenGL Code形式,即可以在VC++引入这一文件.

第二,在VC++中控制三维模型.下面简单介绍VC++的MFC编程中运用OpenGL三维图形库编写实时动画应注意的几个问题:(1)在主视的文件中应包含OpenGL的头文件,即GL/gl.h,GL/glu.h和GL/glaux.h;(2)使用Windows的设备上下文句柄,也需要申请OpenGL的着色设备上下文句柄,同时保证正确释放着色设备上下文句柄;(3)OpenGL函数只存在指定窗口类型为cs.style等于WS_CLIPSIBLINGS |WS_CLIPCHILDREN时才有效;(4)注册并实现OpenGL的设备上下文句柄,并保证与Windows的窗口句柄的正确连接;(5)在用OpenGL绘图时,必须指定像素格式;(6)由于要保证窗口尺寸变化时图形应做到不变形.因此,应实现新的窗口纵横比和视口尺寸.这里只是对编程中的几个要点作说明,读者可以根据自己的具体需要实现绘图. 为了优化系统性能,一般应采用调用显示清单的方法调用这些数据.一个显示清单就是一组先被存储再被运行的OpenGL命令,当一个显示清单被触发时,它内部的命令以它们被发布的顺序被执行,这有别于OpenGL的立即模式.即立即执行命令的方式.OpenGL的显示清单实际上就是命令的一个高速缓冲存储器,而不是一个动态数据库,即一个显示清单一旦被创建了,它就不能被修改.无论是在运行OpenGL程序的本地机上,还是在运行OpenGL程序的怎么写作器上,合理地使用显示清单都可以改善系统性能.

运用OpenGL的显示清单主要包括以下几个步骤:(1)创建显示清单用glNewList( )和glEndList( )语句对,在两句中间包含显示清单的内容;(2)控制显示清单和它们的索引,当然可以用任意一个正整数作为显示清单的索引,但这易引起混淆,因此用glGenLists( )函数自动产生一个未创建的索引;(3)调用显示清单用glcallList( )即可;(4)有时有多个显示清单索引,如果要使显示清单索引可以再被使用,应用glDeleteLists( )函数删除显示清单.

3.用VC++及OpenGL开发出三维模型文件嵌入控件

在VC++下用ATL做一个OpenGL的三维模型文件嵌入(CO)控件,其步骤如下:

第一,新建一个ATL空项目(项目名OpenGL_ATL).

第二,添加一个ATL对象(MyControl)(VC6下为Full Control,VC7下为ATL控件).

第三,在对象的.H头文件中添加: #include 、#include 、#pragma ment(lib, "opengl32.lib")、#pragma ment(lib, "glu32.lib").

第四,在接口实现类添加一个OpenGL的RC(rendering context)成员变量:HGLRC m_hRC.

第五,添加一个设置OpenGL像素格式(接口实现类的)成员函数.

第六,添加一个Windows消息WM_CREATE:

LRESULT CMyControl::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);{

HDC hdc 等于 GetDC( ); RECT rc;GetClientRect(&rc);

CreateContext(hdc, rc);//初始化

return 0;}

第七,添加一个Windows消息WM_DESTROY LRE SULT CMyControl::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)

{ wglMakeCurrent(NULL, NULL);

if (m_hRC) { wglDeleteContext(m_hRC);m_hRC 等于 NULL;} return 0;}

第八,添加一个事件OnRender,点击ClassView中的IMyControlEvents添加方法OnRender参数int right,int left,int bottom,int top,然后编译idl文件,点击CMyControl实现连接点选中IMyControlEvents.

第九,在OnDraw添加代码:

HRESULT OnDraw(ATL_DRAWINFO& di)

{ HDC hdc 等于 di.hdcDraw; RECT& rc 等于 *(RECT*) di.prcBounds; wglMakeCurrent(hdc, m_hRC); glClearColor (1.0f, 0.0f, 0.0f, 10.0f); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//激发OnRender事件

FireOnRender(rc.right , rc.left, rc.bottom , rc.top);

OnRender(rc.right,rc.left,rc.bottom,rc.top) ; glFinish( ); SwapBuffers(wglGetCurrentDC( )); return S_OK;}

第十,编译.要使用本控件,首先注册,然后拖到要显示的窗体上,并在OnRender事件中写入要显示的物体.

四、应用举例

拆卸步骤:(1)拆下变速器上盖总成;(2)拆下一轴总成;(3)用拉器拉出二轴后轴承;(4)取出二轴总成.

装复:与分解顺序相反,点击零部件进行装复.

图2 三维模型的交互式拆装训练界面

图2应用本文阐述的方法开发的汽车三维仿真模型交互显示及模拟拆装系统界面,该系统通过网络环境下的ASP动态网页技术与Cult3D网络三维浏览技术以及网络数据库技术实现了汽车结构三维模型在线展示,也可以在Director、PowerPoint、VC++等软件中进行汽车结构三维模型动态交互展示,即可以对三维模型进行旋转、缩小、拆分和装复等.

五、结束语

本文讨论了基于多媒体的汽车三维仿真模型交互显示及模拟拆装系统开发过程中的若干关键技术和系统的主要构架,提出了三维可视化和交互式浏览的显示设计方法,即使用Pro/E、3DAX和Cult3D建立产品模型,通过Cult3D Ja API和VC++实现场景交互,从而实现对三维模型进行旋转、缩小、拆分和装复等.