APP下载

基于OpenGL ES的齿轮参数化建模及其移动端可视化研究

2017-05-17张海林邹欣孙津原

数字技术与应用 2017年3期

张海林++邹欣++孙津原

摘要:构建基于OpenGL ES的渐开线圆柱齿轮模型,解决在移动设备上参数化生成渐开线圆柱齿轮模型困难和渐开线圆柱齿轮模型在移动端可视化流程等问题。分析渐开线圆柱齿轮形成原理,根据移动设备图形渲染库OpenGL ES渲染方式确定渐开线圆柱齿轮建模数据的方法进行研究。总结出渐开线圆柱齿轮的参数化建模关键技术和移动端可视化流程,以Unity3D为开发环境,制作出在移动设备上展示渐开线圆柱齿轮的应用程序(APP)。验证了基于OpenGL ES的渐开线圆柱齿轮参数化建模在移动设备上的优越性,为构建其它机械构件模型提供了方法,同时探索了机械类知识在移动设备上的传播。

关键词:OpenGL ES;渐开线圆柱齿轮;参数化建模;移动端可视化

中图分类号:TH132.41 文献标识码:A 文章编号:1007-9416(2017)03-0077-05

机械类基础课中有很多抽象的原理知识不易被学生接收,又不能随意删减,然而在真实的情景中讲述就能轻松释义[1]。虚拟模型库因其三维模型造型逼真、控制灵活而在教学中起到了一定的作用[2]。但是,已开发的虚拟模型库都是基于PC 平台开发的,而由于PC 平台的在便携性方面的限制,使得虚拟模型库的应用也受到了极大的限制。手持移动设备的出现,为解除这种束缚提供了条件,该类设备最重要的属性即是其便携性,而且随着硬件水平的不断提高,运行平台的实用性也日益增强,现在越来越多的应用程序(APP)在移动设备平台上得以实施。若采用在工程软件中建渐开线圆柱齿轮模型,再把这些模型加载到APP中,会导致APP的安装包过大,并且由于齿轮的参数不同,要把所有的渐开线圆柱齿轮显示在手持移动设备上,需要建几百个齿轮。本论文以渐开线圆柱齿轮形成原理为基础,以移动设备的图形渲染库OpenGL ES为工具进行研究,得出渐开线圆柱齿轮建模关键技术,该技术可应用到各种开发环境中。总结出移动端可视化流程,采用参数化设计的方法制作出可以在手持移动设备上使用的APP。参数化设计方法就是将模型中的定量信息变量化,使之成为任意调整的参数。对于变量化参数赋予不同的数值,即可得到不同大小和形状的零件模型[3]。参数化设计大大减少了重复设计量、缩短了设计周期和提高了设计效率,使机械类构件完美的呈现在移动设备上[4]。

1 齿轮参数化建模关键技术及过程

1.1 OpenGL ES绘图原理

OpenGL ES 是一个跨平台的图形库,是专门为嵌入式系统(如Android系统、IOS系统等)而设计的,提供了功能完善的 2D 和3D图形应用程序接口API,创造了软件与图形间加速灵活强大的底层交互接口[5]。OpenGL ES 2.0及更高版本的渲染管线可编程,其绘图原理如图1所示。

OpenGL ES中支持的绘制方式大致分3类,包括点、线段、三角形,每类中包括一种或多种具体的绘制方式[6],本论文采用GL_TRIANGLES,此方式是三角形类之一,其将传入渲染管线的一系列顶点按照顺序每3个组织成一个三角形进行绘制。如图2所示,所绘矩形由三角形V0V1V2、V3V4V5而得,其中顶点V2、V5以及顶点V1、V3位置相同。

根据OpenGL ES绘图原理和本論文采用的GL_TRIANGLES方式,在齿轮参数化建模中,需要确定顶点数组、法向量数组和颜色数组。其中顶点数组控制齿轮形状,法向量数组控制齿轮对灯光的反射,颜色数组控制齿轮颜色。设三个数组类型均为单精度浮点型,顶点数组命名为Vertex_List,法向量数组命名为Normal_List,颜色数组命名为Color_List。

1.2 齿轮参数化建模数据的确定

根据设定目标,确定齿轮参数化建模所需要的参数。本论文设定的目标是构建标准渐开线圆柱齿轮;能动态生成直齿轮和斜齿轮两种类型,斜齿轮的螺旋角可以调节;通过调节模数、齿数、齿轮厚度改变齿轮的轮廓特征,通过调节颜色的RGB值改变齿轮显示颜色,通过调节齿孔半径,给齿轮开不同大小的孔或槽,具体的参数名称、参数代号,参数取值如表1所示。

本论文构建标准渐开线圆柱齿轮,因此对部分参数取标准值,该参数在计算中始终是常数。另有一些基本参数根据表1中输入的参数而确定,具体参数名称、参数代号、计算公式如表2所示。

1.3 齿轮绘制过程

如图3所示,为展角,为压力角,为基圆半径,为渐开线在任意点K(1、2、3等)的向径。渐开线极坐标方程如公式(1)[7],将基圆圆心作为原点,圆心与渐开线的起始点A的连线作为x轴,与x轴垂直的方向作为Y轴建立笛卡尔坐标系,按照渐开线形成原理得出渐开线的方程如公式(2)[8],其中。

(1)

(2)

当时,齿根圆包含于基圆,齿廓曲线必然由径向直线和渐开线两部分组成,且齿廓曲线处于基圆与齿根圆之间的为径向直线,处于基圆与齿顶圆之间的为渐开线;当时,齿根圆包含基圆,齿廓曲线全为渐开线[9]。由此可以确定公式(2)中的取值范围,当时,最小取值为,取最大值的条件为,即,其中和取值根据公式(3);当时,最小取值的条件为,即,其中和取值根据公式(4),的最大值与时的最大值一样。

(3)

(4)

本论文以时为例,的取值范围为[],设其长度为,将t平均分成n份,将、、到带入公式(2),求出点1、2、3到n的坐标。将坐标点按三角形排列方式,102、203、304等所有坐标点放入Vertex_List,当n取合适值时,就可以得到平滑的渐开线面,如图4中的①。

当计算出一个齿的右部分顶点后,采用对称的方法求出左部分的顶点。首先确定对称直线,在图3笛卡尔坐标系中,直线就是该直线,设斜率角为,取值根据公式(5),设该直线的斜率为,则该直线方程为。从Vertex_List中遍历每个点,根据公式六求出对应点,增加到Vertex_List中,得到图4中②部分的区域,b区域为三角形形状,根据边界点可以得出。

(5)

(6)

设齿槽对应圆心角为,当时,;当时,。根据公式(7),计算相关坐标点增加到Vertex_List中,得到图4中③部分的c区域,其中的取值范围为[]。

(7)

当绘制好一个完整齿后,需要复制出z-1个齿,这些齿是以原点为中心,根据公式(8),旋转复制而得,并将复制后的坐标增加到Vertex_List中,绘制的结果如图5中⑤,其中的取值范围为[][10]。

(8)

这样,齿轮的正面绘制完,将所得数组命名为Vertex_List_1,并将所有顶点的坐标值设置为。齿轮侧面的数组命名为Vertex_list_2,齿轮背面数组命名为Vertex_list_3。在斜齿轮中,设齿轮正面的齿与齿轮背面的齿投影夹角为,根据公式九和公式八,对Vertex_List_1中的顶点计算,并将得到的每一个三角形顶点按顺时针重新排列,坐标值设置为,存入到Vertex_List_3,其中时,为直齿轮。将Vertex_List_1和Vertex_List_3中对应位置的顶点按照三角形方式排列,存入Vertex_List_2中,即得到齿轮侧面数组。将Vertex_List清空,将Vertex_List_1、Vertex_List_2、Vertex_List_3按照顺序存入Vertex_List中,至此,齿轮顶点数组制作完成,绘制后的效果如图5中的⑥。

(9)

根据存入到Vertex_List中的点,计算齿轮面法向量,存放到Normal_List中。计算方法是从Vertex_List中提取一个三角形的三个点,设为点A、B、C,由点A点B构造向量,由点A点C构造向量,则点A、点B、点C的向量是,存放到Normal_List中。然后遍历Vertex_List,计算所有对应点的向量,存放到Normal_List中。本论文研究的齿轮,每个顶点的颜色相同,并且由光的三原色R、G、B确定,Color_List中存放所有顶点的R、G、B值,其中R、G、B的值由参数传入而确定。

2 移动端可视化流程

移动端可视化流程,如图6所示,第一步设定目标,即制作的APP要满足的功能。第二步,确定齿轮参数化建模数据,根据第一步设定的目標,参数分为固定参数和可变参数,其中可变参数需要通过界面交互传入,因此界面设计除满足美学要求外,也要满足可变参数的改变。第三步,选择移动端APP开发工具,如针对Android系统开发的Eclipse软件、针对iOS系统开发的XCode软件、跨平台开发软件Cocos2d-x、Unity3d、Unreal Engine 4等,不同软件所使用的开发语言不同,如Eclipse使用Java,Unreal Engine 4使用C++。第四步,根据本论文第一节齿轮参数化建模关键技术及过程和选择的开发工具及其相应的开发语言,确定顶点数组(Vertex_List)、法线数组(Normal_List)和颜色数组(Color_List)具体值。第五步,结合app界面设计进行程序设计。第六步,图形测试,检查是否有剖面,形状、颜色是否正确等。第七步,针对移动端,生成相应的APP文件。

下面展示移动端可视化流程的一种案例:

第一步,本案例设定目标为能展示标准直齿、斜齿渐开线圆柱齿轮,其中斜齿轮螺旋角可以改变;能够在齿轮中间开圆孔和槽孔,孔径大小可以改变;齿轮模数、齿数、齿厚、颜色可以改变;可以远近观察齿轮。第二步,根据第一步设定的目标,除需要表1和表2,需要增减直齿轮和斜齿轮切换参数,以及远近观察参数,由此APP的界面设计如图7所示,图中间部分放齿轮模型。第三步,本案例选Unity3D为开发工具、C#为开发语言。第四步,图8所示,为将公式三转换成代码形式,确定渐开线面的顶点,形状如图4中的①。按照此方法,计算出所有部分的顶点后,放入Vertex_List中,得到顶点数组。法线数组(Normal_List)和颜色数组(Color_List)方法一致。第五步,进行程序设计,如图9所示。首先在Unity场景编辑器中建立GameObject,命名为Gear_Watch;其次,为Gear_Watch构建脚本(Script),命名为GearMode.cs,脚本文件中的变量与第二步确定的相对应,并与界面设计的图标进行关联;最后,为Gear_Watch添加材质(Material),命名为Material_Gear.mat,材质的着色器(shader)选择专门为本案例编写的Shader_VF_Gear.shader,控制齿轮的颜色。开发工具选择的不同,顶点数组(Vertex_List)、法线数组(Normal_List)、颜色数组(Color_List)输入到渲染管线的方式可能不同。如图10所示,脚本GearMode.cs的部分代码,顶点数组的输入,需要将Vertex_List转换成只存储坐标点的vertices数组和只存储顶点三角形索引位置的triangles数组,然后传入渲染管线。由于所有的顶点颜色一样,根据着色器(shader)的编写,只需要传入三个颜色值即可,不用传入Color_List数组。第六步,图形测试,如图11所示,改变不同的参数,生成的齿轮部分图片,经测试,结果正确。第七步,在Unity中的File菜单下的Build Settings面板中,选择移动端系统的选项,点击Build,即生成相对应系统的APP安装文件,如图12所示。

3 APP运行及结果

首先点击手机桌面上名称为Gear的APP,进入APP的界面,如图13所示。界面右侧的参数面板分点击和滑动两种操作,改变相应的参数,界面中间的齿轮形态同步改变。当连续改变某一参数,可动态观察齿轮的变化。手指选中中间的齿轮,可以任意角度的旋转,进行观察。界面左侧的滑动条用来调整APP内的摄像机与齿轮的远近位置。图14为斜齿轮,螺旋角调到20,选择槽孔,孔径52mm,模数选择5.5,“第二系列”文字提示用红色显示,因为在机械行业模数要优先选择第一系列的数值。齿数选择39,齿厚为模数的6倍,齿轮的颜色R、G、B值分别是0、127、131。

4 结语

在研究OpenGL ES图形库的基础上,以渐开线圆柱齿轮的形成原理为理论基础,结合几何学相关知识,总结出渐开线圆柱齿轮参数化建模的关键技术,即确定顶点数组、法线数组和颜色数组。根据所得数组,结合开发环境,同时参考交互设计、界面设计、计算机编程等知识,得出移动端可视化流程。并使用Unity3D制作出可安装到移动端的APP,动态展示不同参数下的齿轮形状和颜色,验证了基于OpenGL ES的渐开线圆柱齿轮参数化建模在移动设备上展示的优越性。此外,根据总结出的渐开线圆柱齿轮参数化建模关键技术、移动端可视化流程,为构建其它机械构件提供了指导,如构建锥齿轮、凸轮等。对机械构件在移动设备上进行虚拟演示奠定了一定基础,使机械知识的传播和普及更加方便、高效。

参考文献

[1]管巧娟.基于认知过程的机类基础课组合式学习[J].图学学报,2015(04):638-643.

[2]邱龍辉,楚电明,叶琳.基于智能手机的工程图学虚拟模型库的研究与实现[J].图学学报,2013(01):83-86.

[3]卢杰,米彩盈.基于SolidWorks 的联合参数化设计方法研究[J].图学学报,2013(6):64-68.

[4]胡一钦.变结构体参数设计的一种新方法[J].机械设计与制造,2011(5):41-42.

[5]Hu Xueyan, Xia Zhonglin. Study on Image Deformation Simulation based on ARM Linux and OpenGL ES[J]. Intelligence Science and Information Engineering,2011(8):303-306.

[6]吴亚峰.Android3D 游戏开发技术宝典--OpenGL ES2.0[M].北京:人民邮电出版社,2012.

[7]孙恒,陈作模,葛文杰.机械原理[M].北京:高等教育出版社,2006.

[8]李华敏,韩元莹,王知行.渐开线齿轮的几何原理与计算[M].北京:机械工业出版社,1985.

[9]张俊义,丁文捷.可实现参数化的渐开线圆柱齿轮建模方法研究[J].机械研究与应用,2013(06):40-42.

[10]张宪荣,陈麦,张萱.工业设计理念与方法[M].北京:北京理工大学出版社,2007.