AR Engine毫秒级平面检测,带来更准确的呈现效果
近年来,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 最新技术资讯~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
10分钟带你徒手做个Java线程池
摘要:花10分钟开发一个极简版的Java线程池,让小伙伴们更好的理解线程池的核心原理。 本文分享自华为云社区《放大招了,冰河带你10分钟手撸Java线程池,yyds,赶快收藏吧》,作者:冰 河。 Java线程池核心原理 看过Java线程池源码的小伙伴都知道,在Java线程池中最核心的类就是ThreadPoolExecutor,而在ThreadPoolExecutor类中最核心的构造方法就是带有7个参数的构造方法,如下所示。 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 各参数的含义如下所示。 corePoolSize:线程池中的常驻核心线程数。 maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值大...
- 下一篇
一种面向后端的微服务低代码平台架构设计
作者:京东科技常姜洲 一、背景 近期参加公司组织的极客中餐厅训练营,我们所在的小组接到的课题是微服务的低代码平台架构设计。目标是:结合京东业务研发实际情况,针对后端研发人员,设计一个微服务低代码平台,助力更高效低交付业务需求。现已结业,将我在本次项目中沉淀设计出的设计文档整理成文,期待与大家有进一步的碰撞沟通 二、低代码平台整体技术架构设计 1、低代码开发三阶段 平台为开发者的三个阶段提供的核心功能: 1. 开发阶段:服务编排能力,提供可组合的方式绑定事件源和事件消费者(函数、API、数据源管理等基础能力) 2. 部署阶段:生成、托管、获取、构建和打包代码。 3. 运维阶段:为 Serverless 应用提供部署和服务支持。提供友好的日志系统,能够帮助平台工具使用者快速定位问题,提供对各种使用中间件状态监控,避免工具平台成为一个黑盒子 整个3阶段如下图所示: 2、低代码平台功能架构设计 角色与主功能说明: 本低代码开发平台的服务对象为开发者,旨在使用低代码开发平台,进行快速的微服务应用开发与部署,相对于传统的开发与部署方式减少研发时间,降低成本 Low Code 开发面板:...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启