黄良强,朱 焱,丁国富
(1.西南交通大学 信息科学与技术学院,四川 成都 611756; 2.西南交通大学 机械工程学院先进设计与制造技术研究所,四川 成都 610031)
2015年7月4日,《国务院关于积极推进“互联网+”行动的指导意见》发布,要求将互联网的创新成果与经济社会各领域深度融合,进一步促进社会发展[1]。“互联网+”意味着“互联网+各个传统行业”,但这并不是简单的两者相加,而是利用信息通信技术以及互联网平台,让互联网与传统行业进行深度融合[2],充分发挥互联网在生产要素配置中的优化和集成作用,提升实体经济的创新力和生产力,形成更广泛的以互联网为基础设施和实现工具的经济发展新形态[3]。
在传统制造业标准化、规模化生产模式下,企业往往会以产品定销售,而消费者需求往往难以预估。随着信息化、个性化时代到来,产品设计服务提供方及时准确获悉用户的产品需求,设计出相符的产品,让用户及时便捷地查看设计样品,提出进一步的优化需求,以实现更加精准的个性化服务。如图1所示,面向互联网+的产品数字化设计与制造服务平台就是这样一种能架构起产品需求方与产品设计服务提供方的桥梁。
“互联网+”和云平台软件即服务(SaaS)技术,把一系列可共享的软件资源放置在云端,用户可随时使用移动终端设备访问云平台中的软件资源,查看设计的产品是否满足需求,并实时根据需求查看、设计、修改3D数字化产品模型,加速资源共享,实现资源利用最大化。本文研发内容作为该平台的子模块之一,以“互联网+制造业”为背景,对3D数字化产品移动端可视化进行研究。
图1 平台架构
随着智能手机的普及,设计师可利用移动端(手机、平板电脑等移动智能设备)进行3D数字化产品设计研发工作。本文研发成果可不受设备、时间、地点等条件限制,实现多角度、3D立体观察数字化产品模型,便于用户提出修改意见,方便设计师和客户交互,提高研发效率。
安卓占据智能手机销量的87.2%[5],因此,本文的研发工作基于Android OS的智能手机平台。
3D模型可使用多种文件格式表达,如STL、OBJ、MAX等。OBJ格式表达的3D模型是一种标准的3D模型文件,由于OBJ文件适用于不同文件格式的3D模型之间互导,且当前大多数3D绘图软件都支持OBJ格式的读、写等操作,因此可利用OBJ文件模型作为基础模型,把不同文件格式的3D模型转化为OBJ文件,最后利用移动端可视化技术对其进行可视化操作。OBJ文件是一种文本文件,可直接用写字板、Word等文本编辑工具进行查看和修改,因此本文的可视化研发工作基于OBJ文件。
OBJ支持多种几何图形,包括直线(Line)、表面(Surface)、多边形(Polygon)和自由形态曲线(Free-form Curve),主要特点有:
(1)它是一种3D模型的骨架性文件,包含模型在3D空间中的几何信息,但不包含动画、材质特性、贴图、贴图路径等信息。
(2)支持法线和贴图坐标。
(3)不包含面的颜色定义信息,但可以引用材质库,材质库信息储存在后缀为".mtl"的独立材质库文件中。
OBJ是文本格式,每行由标识字母也即关键字打头,关键字标识该行数据所表示的含义,注释行以符号‘#’开始。
OBJ格式的3D刀具模型文件内容如下:
# 创建时间:11.10.2017 14:50:59
mtllib D10-3.mtl
v 2.6327-47.00001.4383
v 1.5514-48.00001.2622
……
vn -0.9698 0.0782-0.2310
vn -0.7450 0.0894-0.6611
……
vt -1.4181 0.1396-0.0000
vt -1.3700 0.0000-0.0000
……
s 1
f1/1/1 2/2/2 3/3/1
f4/4/3 5/5/4 6/6/3
其中,第2行mtllib表示使用与OBJ文件配套的材质库,v表示几何顶点 (Geometic Vertices),vn表示顶点法线(Vertex Normals)。
MTL材质库文件包含材质漫反射、环境、光泽的RGB定义值,以及折射、透明度等其它特征。MTL文件也是一种文本文件,每一行数据由关键字开始。
3D刀具模型材质库文件内容如下:
#创建时间:11.102017 14:50:59
newmtl wire_008110135
Ns 32
d 1
Tr 0
Tf 1 1 1
illum 2
Ka 0.0314 0.4314 0.5294
Kd 0.0314 0.4314 0.5294
Ka 0.3500 0.3500 0.3500
关键字newmtl表示定义新的材质组,Ns表示材质光亮度,illum表示材质照明度,Kd表示材质散射参数。
OpenGL(Open Graphics Library)本身是高效、简洁的开放图形库接口,它定义了一个跨编程语言、跨平台的编程接口规范,主要用于3D模型编程,但在智能手机等手持移动终端上运行OpenGL有些不适合,所以Android系统内置的是OpenGL ES[6]。Android提供了GLSurfaceView组件支持OpenGL ES,这个组件本身并不提供3D模型绘制功能,而是GLSurfaceView.Renderer实例化来完成GLSurfaceView中3D模型的绘制工作[7]。
jPCT-AE是基于OpenGL ES技术开发的3D图形引擎,以Java语言为基础。jPCT-AE拥有以下几个重要特征[8]:①支持加载3DS、OBJ、MD2、ASC等序列化的3D模型文件格式;②可支持3D模型文件渲染到纹理;③支持Android1.5及更高版本上的OpenGL ES1.x和OpenGL ES 2.0;④支持内存压缩,可减轻3D模型渲染对内存空间造成的压力。因此,本文选择OpenGL ES和jPCT-AE技术作为移动端3D模型可视化应用研发的技术支持。
构建一个3D模型需要完成3个步骤:
(1)jPCT-AE引擎提供的图形构建方法定义为Loader.loadOBJ,加载OBJ格式的3D模型文件和MTL文件到一个Object3D对象数组中。
(2)借助Object3D.mergeAll方法合并Object3D对象数组中的所有对象,构成一个完整的OBJ格式3D模型对象。
(3)调用函数方法Object3D.build完成OBJ格式的3D模型构建工作。
纹理贴图可让3D模型更加逼真。在OpenGL ES中,onSurfaceCreated方法用于启用纹理贴图,它属于Renderer类,本文结合使用jPCT-AE技术中的TextureManager实现。
应用于纹理贴图的图片格式可以是BMP、PNG以及JPG。使用Bitmap decodeFile方法加载图片,并可使用gl.glGenTextures方法生成对应的纹理贴图。此外,也可使用jPCT-AE技术中Texture类的对象生成对应的纹理贴图。
通过调用OpenGL ES提供的启用贴图坐标数组数据、设置贴图的坐标数据以及执行纹理贴图3个方法完成3D模型的纹理贴图工作。
本文研发的OBJ格式的3D模型可视化模块包括3D模型放大、缩小、旋转等操作,采用Android Touch事件驱动方式实现。
基于OBJ格式的3D模型可视化流程如图2所示。
(1)放大缩小。在Android应用开发中可结合使用多点触摸操作技术和OpenGL ES 3D图形构建方法实现3D模型放大、缩小操作。手指多点触摸需处理ACTION_POINTER_DOWN与ACTION_POINTER_UP两种活动行为,并根据计算两根手指移动的距离等数据实时触发3D模型渲染工作。
(2)旋转。同放大、缩小使用的原理不同,这里需要处理单点触摸操作,处理过程为当按下手指时获取手指的触摸坐标点,在手指移动过程中使用单点操作的MotionEvent.ACTION_MOVE活动行为,处理手指移动的距离和方向等信息,并根据计算获得的数据实时触发3D模型渲染工作。
图2 OBJ格式的3D模型可视化流程
可视化旋转操作。图3展示了3D刀具模型旋转前的效果,图4展示了3D刀具模型旋转后的效果,旋转操作包括左右旋转、上下旋转。
图3 旋转前
图4 旋转后
可视化放大、缩小操作。图5展示了图3的3D刀具模型缩小操作效果,图6展示了放大之后的模型效果。
图5 缩小
图6 放大
本文设计研发的应用软件可与研究背景中提到的云平台系统集成使用,如图1所示,把移动端后台服务器、数据库服务器放置在云端。云平台服务器提供用户数据的存储、读写等功能,用户可通过移动终端设备与后台云服务器进行通信。
本文研发的应用软件结合使用云平台技术,主要提供用户下载服务器上的3D模型文件功能,具体操作流程如图7所示。
图7 3D模型文件下载
用户登录后,通过HTTP网络协议向服务器发送数据下载请求,下载服务器上的3D模型文件。3D模型文件大小从几百KB到几MB不等,为提升软件性能,该模块把3D模型文件下载到移动设备的本地存储系统中,作为缓存文件使用。3D模型文件下载完毕后,调用本地OBJ格式3D模型可视化功能,进行3D模型文件可视化展示与操作。
本文作为“面向互联网+的产品数字化设计与制造服务平台”的子模块之一,完成了3D数字化产品移动端可视化研发工作。本文解析了OBJ格式构成及3D模型数据格式。基于目前流行的智能手机操作系统——Android OS,结合面向移动平台开发的OpenGL ES和jPCT-AE技术,完成了3D数字化产品在移动端的展示、缩放、旋转功能。模块还可集成到云平台系统上,为“互联网+制造业”领域的产品设计提供方便快捷的数字化产品服务方案。