近年来,AR版块成为时下大热,这是一种将事实环境中不存在的虚构物体交融到实在环境里的技术,用户借助显示设施能够领有实在的感官体验。AR的利用场景非常宽泛,波及娱乐、社交、广告、购物、教育等畛域:AR能够让游戏更具互动性;商品通过AR展现更实在;应用AR进行教育教学让形象事物更形象等,能够说AR技术曾经浸透人们生存的方方面面。

为了让人们产生强烈的视觉真实感,AR首先要解决的问题就是如何将虚构对象精确地交融到事实世界中,即让虚构对象以正确的姿势显示在实在场景的正确地位上。一些AR计划实现环境辨认与摄像机位姿计算之后,没有进行立体检测就间接叠加虚构对象显示,导致虚构对象与实在环境没有很好的贴合度,用户容易产生视觉错位,影响虚构对象在事实中的出现成果。因而,如何在不同的实在环境中精确检测出程度或垂直立体,与搁置虚构对象地位的立体保持一致,是用户与AR进行交互的重要一步。

华为HMS Core AR Engine跟踪设施四周的光照、立体、图像、物体、环境外表等环境信息,辅助开发者们的利用实现虚构物体以场景化的形式真切地融入事实物理世界。其中立体检测能力可辨认到程度和垂直立体(高空或墙面)上的成群特色点,并可辨认到立体的边界,开发者们的利用可应用这些立体来搁置须要的虚构物体。

Demo

性能特点

反对辨认程度立体、垂直立体辨认

准确度2.5cm@1m

辨认失常纹理速度<1s

反对多边形拟合和立体合并

开发步骤

开发环境要求:

JDK 1.8.211及以上。

装置Android Studio 3.0及以上:

minSdkVersion 26及以上

targetSdkVersion 29(举荐)

compileSdkVersion 29(举荐)

Gradle 6.1.1及以上(举荐)

在华为终端设备上的利用市场下载AR Engine服务端APK(需在华为利用市场,搜寻“华为AR Engine”)并装置到终端设备。

测试利用的设施:参见AREngine个性软硬件依赖表中环境Mesh反对设施列表。如果同时应用多个HMS Core的服务,则须要应用各个Kit对应的最大值。

开发筹备

  1. 在开发利用前须要在华为开发者联盟网站上注册成为开发者并实现实名认证,具体方法请参见帐号注册认证。
  2. 华为提供了Maven仓集成形式的AR Engine SDK包,在开始开发前,须要将AR Engine SDK集成到您的开发环境中。
  3. Android Studio的代码库配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请依据您以后的Gradle插件版本,抉择对应的配置过程。
  4. 以7.0为例:

关上Android Studio我的项目级“build.gradle”文件,增加Maven代码库。

在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。

buildscript {        repositories {            google()            jcenter()            maven {url "https://developer.huawei.com/repo/" }        }}

关上我的项目级“settings.gradle”文件,配置HMS Core SDK的Maven仓地址

dependencyResolutionManagement {    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)            repositories {                    repositories {                            google()                        jcenter()                        maven {url "https://developer.huawei.com/repo/" }                    }                }}
  1. 增加依赖 在“dependencies”中增加如下编译依赖:
dependencies {    implementation 'com.huawei.hms:arenginesdk:{version}}

开发步骤

  1. 首先创立WorldActivity,这个Activity介绍如何应用HUAWEI AR Engine的世界AR场景。
Public class WorldActivity extends BaseActivity{Protected void onCreate(Bundle saveInstanceState){     初始化DisplayRotationManager     mDisplayRotationManager = new DisplayRotationManager(this);     初始化WorldRenderManager     mWorldRenderManager = new WorldRenderManager(this,this);}    //写一个手势处理器    Private void initGestureDetector(){mGestureDetector = new GestureDetector(this,new GestureDetector.SimpleOnGestureListener()){        }    }    mSurfaceView.setOnTouchListener(new View.OnTouchListener()){        public Boolean onTouch(View v,MotionEvent event){            return mGestureDetector.onTouchEvent(event);        }    }    //在onResume生命周期中创立ARWorldTrackingConfig    protected void onResume(){        mArSession = new ARSession(this.getApplicationContext());        mConfig = new ARWorldTrackingConfig(mArSession);        …}//创立刷新配置类private void refreshConfig(int lightingMode){    //设置对焦    mConfig.setFocusMode(ARConfigBase.FocusMode.AUTO_FOCUS);    mArSession.configure(mConfig);}}
  1. 创立WorldRenderManager类,该类提供与世界场景相干的渲染治理,包含标签渲染和虚构对象渲染治理。
public class WorldRenderManager implements GLSurfaceView.Renderr{    //须要创立一个绘制框架的类    Public void onDrawFrame(GL10 unused){        //设置可用于存储相机预览流数据的openGL textureIdmSession.setCameraTextureName(mTextureDisplay.getExternalTextureId());//更新AR Engine的计算结果,利用应在须要获取最新的数据时调用此接口ARFrame arFrame = mSession.update();//获取以后帧的相机参数。ARCamera arCamera = arFrame.getCamera();//返回一个坐标运算相干的投影矩阵,可用于相机坐标系到裁剪坐标系转换。arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);Session.getAllTrackables(ARPlane.class)…..    }}
  1. 创立VirtualObject类,该类提供虚构对象的属性以及与虚构对象渲染相干的必要办法。
Public class VirtualObject{}
  1. 创立ObjectDisplay类,依据指定的参数绘制虚构对象。
Public class ObjectDisplay{}

理解更多详情>>

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~