基于Android的3D恐龙博物馆系统的设计与实现

时间:2022-09-22 05:51:27

基于Android的3D恐龙博物馆系统的设计与实现

摘 要:在深入分析Android的系统架构及其应用程序的组成基础上,设计和实现了一款基于Android的3D恐龙博物馆系统。该系统主要包括场景模块、恐龙展台模块和恐龙展示厅模块。该系统能够运用3D恐龙模型实现与用户的互动,具有较强的实用性、开发指导性和科普知识宣传的意义。

关键词:3D恐龙博物馆;Android系统;互动;科普

中图分类号: TP391.9

移动互联网是移动通信和互联网的结合,移动通信和互联网是全球增长最快、发展潜力最大的两大业务,而对于两者的结合体,移动互联网,必然在未来创造巨大的市场和经济神话。移动互联网是一种通过智能移动终端,采用移动无线通信方式获取网络业务和服务的新兴业态,其包含终端、软件和应用三个层面。近年来,移动互联网取得了飞速的发展,深刻改变了人们上网和获取信息的方式。

全球移动互联网的终端主要以Android系统和IOS系统为主,据国际数据公司(IDC)调查显示,截止2013年5月,Android系统占据全球智能手机操作系统市场75%的份额,中国市场占有率为86%。由此可见,手机等移动终端已经成为人们接受新知识的重要途径之一。

博物馆是征集、典藏、陈列和研究代表自然和人类文化遗产的实物的场所,为公众提供知识、教育和欣赏的文化教育的场所,其主要以学习、教育、娱乐为目的,为公众提供服务。目前,国内的博物馆虽然都有自己的主页,但基本上仅含该博物馆的概况、展览、活动等信息,并未提供详细的物体介绍和精致的物体模型,人们必须身临其境才能了解实物的情况,且交互性不强,难以达到科普宣传的效果。

而大多数家长因为工作或其它原因,没有时间和精力陪同孩子参观博物馆,使得一些以少年儿童为主要参观对象的博物馆资源未能充分发挥其作用(比如恐龙自然科技博物馆),并且博物馆的交互性较弱,导致了少年儿童无法充分应用这样的渠道以更好地接受新知识。

基于此,以Android操作系统为基础,我们开发一款基于Android的3D恐龙博物馆系统,该系统使用3D虚拟模型,可以做到恐龙模型与用户的交互,充分调动使用者的兴趣,在与恐龙的互动交流间了解恐龙的基本知识,从而达到寓教于乐的目的。

1 系统基本原理

1.1 碰撞检测基本技术

1.1.1 AABB包围盒原理

所谓的AABB包围盒就是采用一个长方体将物体包裹起来,在进行两个物体的相交性检测时仅检测物体对应包围盒(包裹物体的长方体)的相交性。另外AABB包围盒有一个重要的特性,那就是包围盒对应的长方体每一个面都是与某个坐标轴平行的,因此AABB包围盒又称为轴对齐包围盒。

在具体实现中,只要记录6个值即可,这6个值分别代表每个坐标轴上的最大值与最小值,即Xmin、Xmax、Ymin、Ymax、Zmin与Zmax,在具体的应用中,实际物体上所有的点都必须满足如下条件:

Xmin

为了便于开发实现,可以将表示AABB包围盒的6个参数分成如下两组:

Pmin =[Xmin,Ymin,Zmin]

Pmax = [Xmax,Ymax,Zmax]

由此可非常方便的求得AABB包围盒的几何中心C,公式如下:

C=(Pmin+Pmax)/2 [4]

1.1.2 AABB包围盒的计算

首先记录X、Y、Z三个分量,对每个顶点进行循环求出X、Y、Z这3个坐标的最大/最小值并将其作为包围盒的6个参数值。最后通过这6个参数的值生成包围盒对象的构造器并获得物体平移后的AABB包围盒。

1.1.3 AABB包围盒的碰撞检测

运用AABB包围盒的目的是为了简化物体运动过程中的碰撞检测计算。其基本原理如图1所示。

图1 碰撞检测的基本原理

区域A为重叠区域,主要是用来判断AABB是否相交,在这里可以设定该重合区域的阀值,如果重合度大于设定的阀值,则认为发生了碰撞。

由于任何一个AABB包围盒的各个面都是平行于坐标平面的,因此判断两个AABB包围盒是否发生碰撞仅需分别判断3个轴方向的交叠部分大小是否大于设定的阀值,若大于则发生了碰撞,否则没有发生碰撞。[4]

构造检测两个刚体是否碰撞的方法为首先分别计算A、B两刚体当前位置对应的AABB包围盒,然后再计算两个AABB包围盒在同一轴向上的交叠值。若最大值中较小的大于最小值中较大的则有交叠,交叠值为最大值中较小的减去最小值中较大的;否则没有交叠。按照此方法即可计算出两个刚体对应的AABB包围盒3个轴方向上的交叠部分大小。

1.2 标志板的使用

模拟现实世界的场景中经常需要放置一些装饰物,如树、灌木等。由于这些植物的外形是十分复杂的几何形状,若直接使用三角形进行构建将需要海量的顶点,以现在主流智能手机的硬件配置是难以支撑的。因此构建场景中的植物时需要其他成本更为低廉的技术,所以本系统的场景中均采用了标志板技术,使用纹理矩形来绘制恐龙展台。[4]

1.3 着色器

1.3.1 顶点着色器

顶点着色器是一个可编程的处理单元,功能为执行顶点的变换、光照、材质的应用与计算等与顶点相关的操作。其工作过程为,首先将原始的顶点几何信息及其他属性传送到顶点着色器中,经过顶点着色器处理后产生纹理坐标、颜色和点位置等后继流程所需要的各顶点属性信息,然后再将其传递给图元装配阶段。

1.3.2 片元着色器

片元着色器是用于处理片元值及其相关数据的可编程单元,其可执行纹理采样、颜色的汇总、计算雾颜色等操作,每片元执行一次。片元着色器的主要功能为,通过重复执行将3D物体中的图元光栅化后产生的每个片元的颜色等属性计算出来交由后继阶段使用,如剪裁测试、深度测试以及模板测试。

2 系统架构

2.1 系统的主要功能

本文所设计的3D恐龙博物馆平台的主要功能模块如下:

(1)场景模块。主要分为博物馆和恐龙两个实体,用于调整博物馆和恐龙模型在系统中的位置。

(2)主角人物模块。主要用于设置主角的特性,如视角转换,碰撞检测等。此外该模块还负责设置人物的动作。

(3)控制模块。包括主角移动控制和恐龙旋转控制两部分。

(4)展台模块。该模块负责对展台中的恐龙进行简单的图片介绍和语音介绍。

(5)展示厅模块。主要负责对恐龙进行详细介绍,包括语音控制,背景音乐控制和恐龙触控控制。

系统结构功能如图2所示。

图2 恐龙博物馆系统结构

2.2 系统层次

整个软件系统架构分为三个层次,每个层次的功能分别如下:

(1)库和接口层。该层主要提供给应用框架层一些基本的类库和接口,包括Android的C/C++库、RTP/RTCP库和多媒体的处理接口。

(2)应用框架层。该层采用模块化开发方法,通过使用其下层的函数库提供的接口,将实现相同或相似功能的封装成为一个模块进而供应用层来开发使用。

(3)应用层。通过与应用框架层提供的模块相交互、资源分配等,基于Android的四大组件及其他相关控件完成画面设计,为用户提供一个可视的界面平台。[3]

3 系统实现

3.1 场景中恐龙展台的实现

每个展台用一个纹理矩形进行绘制,纹理矩形上采用内容为装饰物的透明背景纹理图。绘制纹理矩形时要采用恰当的混合因子,使装饰物产生正确的遮挡效果。由于基本标志板实现的装饰物实际上是简单的纹理矩形,因此适合用来呈现左右轴对称的物体,对于非左右对称的物体可能会给人虚假的感觉。同时也正是由于每一个装饰物仅需要一个纹理矩形,所以此技术需要的系统资源非常少,效率很高。[4]

3.2 3D模型的设计与加载的实现

3.2.1 用3DMax设计3D模型

系统所呈现的3D模型都是在3DMax软件下进行模型设计的。在进行模型设计时,首先用基本几何图形构造出恐龙模型的轮廓,然后再用挤压法做出恐龙模型,最后经过软件自带的优化系统优化后以“*.obj”格式导出。

3.2.2 加载obj文件

(1)加载仅有顶点坐标与面数据的obj文件

(2)为了使模型具有更强的立体感这一环节采用了加载后自动计算面法向量的方法。其计算方法为首先将法向量数据由构造器参数中传入,然后求出三角形中的一个点到另外两个点的向量,最后将求出的两个向量进行叉积即可得出三角形面的法向量。

(3)加载后自动计算平均法向量

点平均法向量是指当一个顶点属于不止一个平面时,其法向量采用其所属多个平面各自法向量的平均值。采用平均值后,绘制出来的物体表面就平滑了。

为了便于计算点平均法向量,首先表示出顶点法向量。在这里要判断两个法向量是否相同,由于浮点数有计算误差,事实上相等的法向量其浮点值也很难做到绝对一致。因此比较时需设定一个阀值,当差小于阀值时就认为相等,本系统在这里采用的阀值为0.0000001。求一组法向量平均值的策略为,首先将所有法向量的X、Y、Z分量值各自求和得到和向量,然后将和向量规格化即可得到平均法向量。计算出各个面的法向量后并加入到各个顶点对应的法向量集合中。当所有面的法向量计算结束后,再求出各个顶点的平均法向量,接着送入法向量数据数组以供创建加载物体对象时使用。

(4)加载纹理坐标

为了实现模型纹理的加载,首先要增加接收纹理坐标数据,并将纹理坐标数据送入缓冲以备渲染管线使用,值得注意的是绘制方法也要增加纹理ID的入口参数,这样在绘制时可根据需要传入不同的纹理,方便后续不同模型的纹理加载。

在将obj文件加载的步骤中也要加载顶点纹理坐标数据,并将数据存放到数组中供创建对象使用,在加载纹理坐标时可以将加载后的值除以2,这样可以减少纹理的重复次数。

最后在着色器上也要增加接收纹理坐标、纹理数据以及进行纹理采样。[4]

3.3 3D恐龙模型缩放与旋转的实现

为了方便用户的操作,在缩放与旋转上采用了多点触控的技术。

多点触控是指同时支持两个或两个以上的触控点,一个称为主点,另一个称为辅点,每个触控点都有按下、移动和抬起3个动作。实现多点触控的原理为:在触控到下一点后将原来位置记录为旧位置,设置新位置然后计算两个触控点的直线距离。

缩放的实现。首先判断用户是否已触控到两个点,若已完成触控,则计算两个触控点之间的距离。根据两点间的距离设置以完成对恐龙模型的缩放。

旋转的实现。首先计算上一位置对应的角度和当前对应的角度,将两个角度相减得到旋转变化角度,然后将旋转变化角度叠加到总旋转角度中。根据旋转的角度与恐龙移动的关系来实现恐龙的旋转。

3.4 主角(展翅飞翔的雄鹰)的动画实现

主角动画采用关键帧动画,就是给顶点着色器提供动画中每个关键帧对应的各个顶点的位置数据以及融合比例。顶点着色器根据两套位置数据集当前融合的比例融合出一套结果顶点位置数据。只要在绘制每一帧时提供不同的混合比例即可。

老鹰用到了3个关键帧包含4个动画阶段。

第一阶段是对1、2号关键帧中顶点数据的融合。

第二阶段是对2、3号关键帧中顶点数据的融合。

第三阶段是对3、2号关键帧中顶点数据的融合。

第四阶段是对2、1号关键帧中顶点数据的融合。

重复执行上述四个阶段即可完成雄鹰展翅飞翔的动画。具体效果如图3所示。[4]

图3 雄鹰运行效果图

具体实现方法如下:

(1)在用3dmax设计好雄鹰模型后导出obj文件。

(2)加载雄鹰模型,创建第一个顶点坐标数据缓冲,设置字节顺序转换为浮点型缓冲,向缓冲区放入顶点坐标数据,设置缓冲区起始位置。重复此方法将3个关键帧的顶点数据加载进应用程序并存放到缓冲中。

(3)为了在顶点着色器中能够根据比例融合关键中的顶点数据,因此需要将融合的比例传入渲染管线。由于有3个关键帧,因此融合比例在0-2之间连续变化。

4 系统应用效果

4.1 恐龙博物馆场景

点击应用图标便可以进入到开场动画,进入开场动画后会看到该应用的主界面,在这里滑动可选择不同的博物馆场景,每个场景中有不同的博物馆和恐龙。点击一下屏幕后我们会进入到恐龙博物馆的加载界面。系统在恐龙模型和场景模型加载完成后进入博物馆。完成后的效果如图4所示。

图4 恐龙博物馆场景

4.2 恐龙展台

进入博物馆后,接近恐龙点击右上角图标进入个体恐龙展台,在展台界面中可以得到该恐龙的一些简单信息,如身高、体重、生存时期等。完成后的效果如图5所示。

图5 恐龙展台

4.3 恐龙展示厅

在展台中点击左上角的球形图标即可进入单个恐龙的展示厅,在这里调用的是恐龙的3D模型,用户可对模型进行放大缩小,旋转等操作。触摸恐龙的部位,会自动跳转到对该部位的单独介绍界面,同时该部位会发亮以提醒用户为该部位的单独介绍。完成后的效果如图6所示。

图6 恐龙展示厅

5 结束语

作为时下最热门的手机系统,Android的应用拥有广大的用户群,所以Android的应用开发也显得尤为重要。

目前本系统的预期目标已经基本达到了,整体系统运行良好,在本系统中添加了大量的恐龙模型和相关的资料,起到了较好的科普宣传作用。美中不足的是娱乐性方面还存在欠缺,这是本系统的进一步重点完善的内容。

参考文献:

[1]柯元旦,宋锐.Android程序设计[M].北京:北京航空航天大学出版社,2010:12-35.

[2]宋小青,周东升.基于Android平台的应用开发研究[J].软件导刊,2011,10(2):104-106.

[3]周时伟,谢伟波.基于Android的智能家居终端设计与实现[J].微型机与应用,2012,7:11-13.

[4]吴亚峰.Android 3D游戏开发技术宝典[M].北京:人民邮电出版社,2013:227-289.

[5]吴亚峰.Android 3D游戏开发技术详解与典型案例[M].北京:人民邮电出版社,2011:49-55.

[6]火星时代.3ds Max 2011白金手册[M].北京:人民邮电出版社,2011:235-271.

作者简介:张鹏(1991.3-),男,学士,主要研究方向:软件工程;魏嘉银(1986.3-),男,博士,主要研究方向:算法设计与分析;秦永彬(1980.11-),男,博士,博士后,副教授,硕士生导师,主要研究方向为:企业ERP研究与应用、智慧计算与智能计算、大数据管理与应用、移动互联网研究与应用。

上一篇:网络拓扑结构研究与分析 下一篇:简单工厂模式在网上购物系统中的应用