鸿蒙图形开发【AR引擎服务】 XR
创始人
2024-11-05 13:08:12
0

AREngine

介绍

本示例展示了AREngine提供的平面检测,运动跟踪,环境跟踪和碰撞检测能力。

效果预览

](https://i-blog.csdnimg.cn/direct/caf49c5d469242248cf87794a7903eef.png)

  1. 在手机的主屏幕,点击“ArSample”,启动应用,在主界面可见“ArWorld”按钮。
  2. 点击“ArWorld”按钮,拉起ArEngine平面识别界面,对准地面,桌面,墙面等平面缓慢移动扫描,即可识别到平面并绘制到屏幕上。
  3. 识别出平面后,点击平面上某个点,通过AREngine提供的命中检测的能力,会在屏幕被点击位置放置一个3d模型。

具体实现

集成服务

使用AREngine服务接口需要在CMakeLists中引入依赖:

find_library( arengine-lib libarengine_ndk.z.so ) target_link_libraries(entry PUBLIC ${arengine-lib} ) 

使用时引入头文件 #include “ar/ar_engine_core.h”

创建会话和帧数据相关接口

AREngine_ARStatus HMS_AREngine_ARConfig_Create(const AREngine_ARSession *session, AREngine_ARConfig **outConfig); void HMS_AREngine_ARConfig_Destroy(AREngine_ARConfig *config);  AREngine_ARStatus HMS_AREngine_ARSession_Create(void *env, void *applicationContext, AREngine_ARSession **outSessionPointer); AREngine_ARStatus HMS_AREngine_ARSession_Configure(AREngine_ARSession *session, const AREngine_ARConfig *config); void HMS_AREngine_ARSession_Destroy(AREngine_ARSession *session);  AREngine_ARStatus HMS_AREngine_ARFrame_Create(const AREngine_ARSession *session, AREngine_ARFrame **outFrame); void HMS_AREngine_ARFrame_Destroy(AREngine_ARFrame *frame); 

平面识别相关接口:

AREngine_ARStatus HMS_AREngine_ARTrackableList_Create(const AREngine_ARSession *session, AREngine_ARTrackableList **outTrackableList); AREngine_ARStatus HMS_AREngine_ARSession_GetAllTrackables(const AREngine_ARSession *session, AREngine_ARTrackableType filterType, AREngine_ARTrackableList *outTrackableList); AREngine_ARStatus HMS_AREngine_ARTrackableList_GetSize(const AREngine_ARSession *session, const AREngine_ARTrackableList *trackableList, int32_t *outSize); AREngine_ARStatus HMS_AREngine_ARTrackableList_AcquireItem(const AREngine_ARSession *session, const AREngine_ARTrackableList *trackableList, int32_t index, AREngine_ARTrackable **outTrackable); void HMS_AREngine_ARTrackableList_Destroy(AREngine_ARTrackableList *trackableList);  AREngine_ARStatus HMS_AREngine_ARTrackable_GetTrackingState(const AREngine_ARSession *session, const AREngine_ARTrackable *trackable, AREngine_ARTrackingState *outTrackingState); void HMS_AREngine_ARTrackable_Release(AREngine_ARTrackable *trackable);  AREngine_ARStatus HMS_AREngine_ARPlane_AcquireSubsumedBy(const AREngine_ARSession *session, const AREngine_ARPlane *plane, AREngine_ARPlane **outSubsumedBy); AREngine_ARStatus HMS_AREngine_ARPlane_AcquireSubsumedBy(const AREngine_ARSession *session, const AREngine_ARPlane *plane, AREngine_ARPlane **outSubsumedBy); AREngine_ARStatus HMS_AREngine_ARPlane_GetCenterPose(const AREngine_ARSession *session, const AREngine_ARPlane *plane, AREngine_ARPose *outPose); AREngine_ARStatus HMS_AREngine_ARPlane_GetPolygonSize(const AREngine_ARSession *session, const AREngine_ARPlane *plane, int32_t *outPolygonSize); AREngine_ARStatus HMS_AREngine_ARPlane_GetPolygon(const AREngine_ARSession *session, const AREngine_ARPlane *plane, float *outPolygonXz, int32_t polygonSize); AREngine_ARStatus HMS_AREngine_ARPlane_IsPoseInPolygon(const AREngine_ARSession *session, const AREngine_ARPlane *plane, const AREngine_ARPose *pose, int32_t *outPoseInPolygon); 

碰撞检测相关接口:

AREngine_ARStatus HMS_AREngine_ARHitResultList_Create(const AREngine_ARSession *session, AREngine_ARHitResultList **outHitResultList); AREngine_ARStatus HMS_AREngine_ARHitResultList_GetSize(const AREngine_ARSession *session, const AREngine_ARHitResultList *hitResultList, int32_t *outSize); AREngine_ARStatus HMS_AREngine_ARHitResultList_GetItem(const AREngine_ARSession *session, const AREngine_ARHitResultList *hitResultList, int32_t index, AREngine_ARHitResult *outHitResult); void HMS_AREngine_ARHitResultList_Destroy(AREngine_ARHitResultList *hitResultList);  AREngine_ARStatus HMS_AREngine_ARHitResult_AcquireNewAnchor(AREngine_ARSession *session, AREngine_ARHitResult *hitResult, AREngine_ARAnchor **outAnchor); AREngine_ARStatus HMS_AREngine_ARHitResult_GetHitPose(const AREngine_ARSession *session, const AREngine_ARHitResult *hitResult, AREngine_ARPose *outPose); AREngine_ARStatus HMS_AREngine_ARHitResult_AcquireTrackable(const AREngine_ARSession *session, const AREngine_ARHitResult *hitResult, AREngine_ARTrackable **outTrackable); void HMS_AREngine_ARHitResult_Destroy(AREngine_ARHitResult *hitResult); 

运动跟踪能力图文介绍:

AR Engine通过获取终端设备摄像头数据,结合图像特征和惯性传感器(IMU),计算设备位置(沿x、y、z轴方向位移)和姿态(绕x、y、z轴旋转),实现6自由度(6DoF)运动跟踪能力。

6DoF运动跟踪能力示意图(红色线代表设备运动方向) 2

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

相关内容

热门资讯

3分钟了解!德普之星透视辅助软... 3分钟了解!德普之星透视辅助软件是真的吗,wejoker开挂,总结教程(有挂技巧)1、实时德普之星透...
5分钟辅助!途游四川小程序规律... 5分钟辅助!途游四川小程序规律(辅助挂)确实真的是有辅助方法(详细教程)1.途游四川小程序规律 选牌...
5分钟了解!购买的wpk辅助在... 5分钟了解!购买的wpk辅助在哪里下载,pokemomo辅助软件,演示教程(有挂技巧)1、超多福利:...
第1分钟辅助!拱趴游戏诀窍(辅... 第1分钟辅助!拱趴游戏诀窍(辅助挂)总是真的是有辅助软件(有人有挂)1、任何拱趴游戏诀窍透视是真的假...
第7分钟辅助!手机挂机软件(辅... 第7分钟辅助!手机挂机软件(辅助挂)确实有辅助插件(今日头条)1)手机挂机软件免费钻石:进一步探索手...
两分钟了解!wpk透视插件,德... 两分钟了解!wpk透视插件,德州之星扫描器,妙招教程(有挂教程)进入游戏-大厅左侧-新手福利-激活码...
1分钟辅助!佛手十三道辅助器(... 1分钟辅助!佛手十三道辅助器(辅助挂)确实存在有辅助方法(有挂存在)佛手十三道辅助器破解侠是真的助透...
第十分钟了解!we poker... 第十分钟了解!we poker免费辅助器,拱趴大菠萝自动计算机器人,攻略教程(真的有挂)1、金币登录...
十分钟辅助!微乐四川麻将辅助器... 十分钟辅助!微乐四川麻将辅助器(辅助挂)其实有辅助教程(有挂方针)微乐四川麻将辅助器脚本下载中分为三...
九分钟了解!wepoker有插... 九分钟了解!wepoker有插件吗,wepoker辅助器有哪些功能,手筋教程(有挂教程)1、操作简单...