ARCore是一种增强现实体验构建平台,它可以利用不同的API让手机能够感知其环境、理解现实世界与信息进行交互。ARCore使用三个主要功能将虚拟内容与通过手机摄像头看到的现实世界整合:
1) 运动跟踪功能让移动设备可以在移动时跟踪特征点的变化情况,从而确定设备移动时的位置和屏幕方向;
2) 环境理解功能让移动设备可以检测各类表面(如地面、桌面或者墙壁等水平、垂直和倾斜表面)的大小和位置;
3) 光估测功能让移动设备可以估测环境当前的关照条件,提升虚拟物体的真实感。
ARCore可以在运行Android 7.0(Nougat)及更高版本系统的多种符合资格的Android手机上使用,具体支持设备完整列表可查看此地址:https://developers.google.cn/ar/discover/supported-devices。
随着ARCore技术的兴起,超图在SuperMap iMobile for Android产品中将三维技术与ARCore技术结合,将更好的服务与数字城市的建设等GIS应用中。下面将分享在iMobile for Android中三维AR的使用。
安装 Android Studio 3.1 或更高版本以及 Android SDK Platform 7.0(API 级别 24)或更高版本。
运行Android 7.0 (Nougat) 及更高版本系统的多种符合资格的Android手机,具体类型查看上述链接地址,小编开发运行时使用的小米8。
在iMobile for Android的三维AR应用中支持BIM、精模和倾斜摄影等数据,所以在iMobile中开发前,需要在SuperMap iDesktop中准备好对应的三维数据,比如,AR中显示BIM或精模等数据,需要对配置好的场景数据切osgb/s3m格式的Android设备的场景缓存;如果是倾斜摄影数据需要在iDesktop中转成Android设备的纹理压缩等。识别区出来后手指触屏加载场景数据,如果数据离触屏位置较远,可以调整缓存数据插入点让模型处于为0,0,0附近,在配置文件.scp中修改参数Position中的x、y和z的值。
定义ARControl对象,开启AR,在运行程序的时候手机会自动去识别平面,等平面识别出来后手指触屏加载数据,关键代码如下:
arControl=new ARControl(this,sceneControl);
sceneControl.sceneControlInitedComplete(new SceneControl.SceneControlInitedCallBackListenner() {
@Override
public void onSuccess(String success) {
//开启AR
arControl.setARstate(true);
}
});
注:在识别平面的时候,手机对的平面不要太光滑,有纹理更能使设备识别到平面特征点,对着平面时可以水平移动手机,加快平面的识别。
AR中加载模型数据时,可以控制图层中数据显示的大小,实现的关键代码如下:
arControl.setAnchorOnClickListener(new ARControl.AnchorOnClickListener() {
@Override
public void onSuccess() {
if(!isFirst && isLicenseAvailable() ){
//打开本地场景数据
openLocalScene();
//设置一个数据放缩,范例数据在室内,默认放缩到0.005,就是室外。
arControl.setLayerScale(0,0.005);
}
}
});
在AR中可以控制每个图层模型数据在X、Y、Z轴方向的平移,实现代码:
arControl.setLayerTransLation(0,10,10,1);
在AR中可以控制每个图层模型数据在X、Y、Z轴方向的旋转,实现代码:
arControl.setLayerRotation(0,10,20,10);
在使用SuperMap iMobile for Android开发三维AR应用的时候,Android平台和SDK版本要高一点,另外要准备支持ARCore的设备。关于具体的应用开发,还可以参考iMobile for Android解压包下/ SampleCode /SampleCode_AndroidStudio/SuperMap AR范例。