共计 3242 个字符,预计需要花费 9 分钟才能阅读完成。
近年来,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 对应的最大值。
开发筹备
- 在开发利用前须要在华为开发者联盟网站上注册成为开发者并实现实名认证,具体方法请参见帐号注册认证。
- 华为提供了 Maven 仓集成形式的 AR Engine SDK 包,在开始开发前,须要将 AR Engine SDK 集成到您的开发环境中。
- Android Studio 的代码库配置在 Gradle 插件 7.0 以下版本、7.0 版本和 7.1 及以上版本有所不同。请依据您以后的 Gradle 插件版本,抉择对应的配置过程。
- 以 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/"}
}
}
}
- 增加依赖 在“dependencies”中增加如下编译依赖:
dependencies {implementation 'com.huawei.hms:arenginesdk:{version}
}
开发步骤
- 首先创立 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);
}
}
- 创立 WorldRenderManager 类,该类提供与世界场景相干的渲染治理,包含标签渲染和虚构对象渲染治理。
public class WorldRenderManager implements GLSurfaceView.Renderr{
// 须要创立一个绘制框架的类
Public void onDrawFrame(GL10 unused){
// 设置可用于存储相机预览流数据的 openGL textureId
mSession.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)
…..
}
}
- 创立 VirtualObject 类,该类提供虚构对象的属性以及与虚构对象渲染相干的必要办法。
Public class VirtualObject{}
- 创立 ObjectDisplay 类,依据指定的参数绘制虚构对象。
Public class ObjectDisplay{}
理解更多详情 >>
拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee
关注咱们,第一工夫理解 HMS Core 最新技术资讯~