当前位置: 首页 > 后端技术 > Java

AREngine毫秒级平面检测带来更精准的呈现效果

时间:2023-04-01 15:02:35 Java

近年来,AR版块成为了时下的热门话题。这是一种将真实环境中不存在的虚拟物体融入真实环境的技术。显示设备可以有真实的感官体验。AR的应用场景非常广泛,涉及娱乐、社交、广告、购物、教育等各个领域:AR可以让游戏更具交互性;通过AR可以更真实地展示产品;利用AR进行教育教学,可以让抽象的事物变得更加生动等等,AR技术已经渗透到人们生活的方方面面。为了让人有强烈的视觉真实感,AR首先要解决的问题是如何将虚拟物体准确地融入现实世界,即让虚拟物体在真实场景中以正确的位置显示出来正确的姿势。一些AR解决方案在完成环境识别和相机位姿计算后,直接叠加虚拟物体显示,不进行平面检测,导致虚拟物体与真实环境贴合度差,用户容易出现视觉错位,影响虚拟现实中的对象。渲染效果。因此,如何准确检测不同真实环境中的水平面或垂直面,并使其与放置虚拟物体的平面保持一致,是用户与AR进行交互的重要步骤。华为HMSCoreAREngine跟踪设备周围的光照、平面、图像、物体、环境表面等环境信息,协助开发者在应用中将虚拟物体以场景化的方式逼真地融入真实的物理世界。其中,平面检测能力可以识别水平和垂直平面(地面或墙壁)上的特征点组,并可以识别平面的边界。开发人员的应用程序可以使用这些平面来放置所需的虚拟对象。Demo功能支持水平面识别,垂直面识别精度2.5cm@1m识别法线纹理速度<1s支持多边形拟合和平面合并开发步骤开发环境要求:JDK1.8.211及以上。安装AndroidStudio3.0及以上:minSdkVersion26及以上targetSdkVersion29(推荐)compileSdkVersion29(推荐)Gradle6.1.1及以上(推荐)在华为终端设备上的应用商店下载AREngine服务器APK(需要在华为应用商店,搜索“HuaweiAREngine”),在终端设备上安装。测试应用的设备:参见AREngine特性软硬件依赖表中Mesh环境支持的设备列表。如果同时使用多个HMSCore服务,需要使用每个Kit对应的最大值。开发准备在开发应用之前,您需要在华为开发者联盟网站注册为开发者并完成实名认证。具体请参见账号注册与认证。华为以Maven仓库集成方式提供AREngineSDK包。在开始开发之前,您需要将AREngineSDK集成到您的开发环境中。对于7.0、7.0和7.1及以上版本的Gradle插件,AndroidStudio的代码库配置有所不同。请根据您当前的Gradle插件版本选择相应的配置流程。以7.0为例:打开AndroidStudio项目级“build.gradle”文件,添加Maven代码库。在“buildscript>repositories”配置HMSCoreSDK的Maven仓库地址。buildscript{repositories{google()jcenter()maven{url"https://developer.huawei.com/repo/"}}}打开项目级"settings.gradle"文件,配置HMS的Maven仓库地址CoreSDKdependencyResolutionManagement{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,里面介绍了如何使用HUAWEIAREngine的世界AR场景。公共类WorldActivityextendsBaseActivity{ProtectedvoidonCreate(BundlesaveInstanceState){初始化DisplayRotationManagermDisplayRotationManager=newDisplayRotationManager(this);初始化WorldRenderManagermWorldRenderManager=newWorldRenderManager(this,this);}//编写一个手势处理器PrivateGet实例)){publicBooleanonTouch(Viewv,MotionEventevent){returnmGestureDetector.onTouchEvent(event);}}//在onResume生命周期中创建ARWorldTrackingConfigprotectedvoidonResume(){mArSession=newARSession(this.getApplicationContext());mConfig=newARWorldTrackingConfig(mArSession);...}//创建刷新配置类privatevoidrefreshConfig(intlightingMode){//设置焦点mConfig.setFocusMode(ARConfigBase.FocusMode.AUTO_FOCUS);mArSession.configure(mConfig);}}创建WorldRenderManager类,提供与世界场景相关的渲染管理,包括标签渲染和虚拟对象渲染管理publicclassWorldRenderManagerimplementsGLSurfaceView.Renderr{//需要创建一个类来绘制framePublicvoidonDrawFrame(GL10unused){//设置openGLtextureIdmSession.setCameraTextureName(mTextureDisplay.getExternalTextureId());//更新AREngine的计算结果,应用需要获取最新数据时调用InterfaceARFramearFrame=mSession.update();//获取当前帧的相机参数。ARCameraarCamera=arFrame.getCamera();//返回一个与坐标操作相关的投影矩阵,可用于相机坐标系到裁剪坐标系的转换。arCamera.getProjectionMatrix(projectionMatrix,PROJ_MATRIX_OFFSET,PROJ_MATRIX_NEAR,PROJ_MATRIX_FAR);Session.getAllTrackables(ARPlane.class)…..}}创建VirtualObject类,它提供了虚拟对象的属性和虚拟对象渲染相关的必要方法。publicclassVirtualObject{}创建ObjectDisplay类,根据指定的参数绘制虚拟对象。公共类ObjectDisplay{}查看更多>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~