儿童数字绘本移动端增强现实应用开发简述

2017-05-30 01:48王毅
科技风 2017年14期
关键词:增强现实

王毅

DOI:10.19392/j.cnki.16717341.201714051

摘要:本文主要简述如何使用Unity及增强现实技术在移动端上实现虚拟3D吉祥物的展示。

关键词:Unity;增强现实;苏州园博会吉祥物

1 制作分析

该应用最终发布在Android及Ios平台,主要利用手机的摄像机对园博会吉祥物图片进行识别,然后利用EasyAR增强现实插件结合Unity游戏引擎对识别的结果进行比对,建立空间矩阵,然后回调相应的吉祥物3D虚拟人物进行表演。

2 实现方法

1)首先使用Maya等三维软件进行吉祥物的3D模型和动画的制作,并导入Unity场景(将模型中心放置在世界坐标原点上)、设置灯光背景等。图1示例了该Unity场景模型效果。

2)使用Unity的UI制作插件NGUI制作本应用的登录界面与3D虚拟人物展示界面,如图2所示(左侧为登录和引导界面、右侧为增强现实识别展示界面)。展示界面预留了用户帮助模块、3D虚拟人物动画播放模块、声音切换模块功能。

图1吉祥物Unity场景模型图2 应用界面

3)Unity导入EasyAR增强现实模块。EasyAR是国内最专业的AR引擎,是国内首款投入应用的AR SDK。EasyAR官网上下载相应插件并导入Unity场景,在EasyAR官网注册相应的应用iD并生成相应的Key值,将Key值填入Unity EasyAR节点相应的Key属性中。

4)在EasyAR 配套Unity基础场景中的ImageTargetJsonFileidback节点中将步骤D的吉祥物模型、相应的吉祥物识别卡片都放置在该节点下。当EasyAR调用成功时,摄像头开启后就可以对卡片进行识别,如果目标卡片与ImageTargetJsonFileidback节点下的卡片匹配,则会显示3D吉祥物,如果摄像头跟踪丢失那么3D吉祥物消失。

5)进行模型展示功能的开发。其中,多点触控来控制3D模型的旋转、缩放的核心代码如下:

public class ScaleAndRotate : MonoBehaviour

{

private Touch oldTouch1;∥上次触摸点1(手指1)

private Touch oldTouch2;∥上次触摸点2(手指2)

void Start() {}

GameObject Capsule_bady = null;

private float rotateN = 1.5f;

void Update()

{

Capsule_bady = GameObject.Find(“Capsule_bady”);∥查找相应的3D吉祥物

if (Input.touchCount <= 0 || Capsule_badynull) { return ; } //没有触摸返回

if (1 Input.touchCount)∥单点触摸,水平上下旋转

{

Touch touch = Input.GetTouch(0);

Vector2 deltaPos = touch.deltaPosition; ∥获得单点滑动的矢量

Capsule_bady.transform.Rotate(1*Vector3.up * deltaPos.x * rotateN);∥进行旋转

}

//多点触摸, 放大缩小

Touch newTouch1 = Input.GetTouch(0);∥获得第1个触摸点

Touch newTouch2 = Input.GetTouch(1); ∥获得第2个触摸点

if (newTouch2.phase == TouchPhase.Began) ∥第2點刚开始接触屏幕,不做处理

{

oldTouch2 = newTouch2;

oldTouch1 = newTouch1;

return;

}

∥计算以前的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型

float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);

float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);

∥两个距离之差,为正表示放大手势,为负表示缩小手势

float offset = newDistance oldDistance;

∥放大因子, 一个像素按 0.01倍来算(100可调整)

float scaleFactor = offset / 100f;

Vector3 localScale = Capsule_bady.transform.localScale;

Vector3 scale = new Vector3(localScale.x + scaleFactor,

localScale.y + scaleFactor,

localScale.z + scaleFactor);

if ((scale.x > 0.7f && scale.y > 0.7f && scale.z > 07f&&scale.x < 1.4f && scale.y < 1.4f && scale.z < 14f))∥最大縮放为1.4倍,最小缩放为0.7倍

{Capsule_bady.transform.localScale = scale; }

oldTouch1 = newTouch1;∥记住最新的触摸点,下次使用

oldTouch2 = newTouch2;

}}

基金项目:本文为校社科基金项目《基于传统文化传承的儿童绘本影像化研究》(项目编号:YN1431)

猜你喜欢
增强现实
虚拟现实及触觉交互技术:趋势与瓶颈
虚拟现实技术对舞台表演艺术观演关系的影响
VR/AR在戏剧中的应用
照片建模与增强现实实验在三维软件基础课程中的应用
增强现实技术在职业教育中的应用
虚拟现实技术和增强现实技术在建筑业的应用初探
虚拟现实技术和增强现实技术在建筑业的应用初探
浅谈增强现实技术及其军事应用
增强现实的系统结构与关键技术研究