华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力3-获取设备位姿

设备位姿描述了物体在真实世界中的位置和朝向。AR Engine提供了世界坐标下6自由度(6DoF)的位姿计算,包括物体的位置(沿x、y、z轴方向位移)和朝向(绕x、y、z轴旋转)。通过AR Engine,您可以实时获取设备在空间中任意时刻的位姿。

创建ARSession

您可以参考管理AR会话创建ARSession。

世界坐标系

设备位姿一般在世界坐标系下进行表示。世界坐标系描述了真实物理空间中物体的绝对位置,其正方向如图所示。

图1世界坐标系示意图

AR Engine会帮助您自动完成世界坐标系初始化。

获取设备当前位姿

  1. 创建一个空位姿变量cameraPose。

    复制代码
    1. AREngine_ARPose *cameraPose = nullptr;
    2. HMS_AREngine_ARPose_Create(arSession, nullptr, 0, &cameraPose);
  2. 获取当前时刻相机位姿信息,并存储在cameraPose变量中。

    复制代码
    1. // 创建一个新的AREngine_ARFrame对象。
    2. AREngine_ARFrame *arFrame = nullptr;
    3. HMS_AREngine_ARFrame_Create(arSession, &arFrame);
    4. // 更新当前帧的结果到arFrame。
    5. HMS_AREngine_ARSession_Update(arSession, arFrame);
    6. // 获取当前帧的相机参数对象。
    7. AREngine_ARCamera *arCamera = nullptr;
    8. HMS_AREngine_ARFrame_AcquireCamera(arSession, arFrame, &arCamera);
    9. // 获取当前时刻相机位姿信息。
    10. HMS_AREngine_ARCamera_GetPose(arSession, arCamera, cameraPose);
  1. 从cameraPose中获取相机位姿的不同分量,包括平移分量和旋转分量。

    复制代码
    1. float poseRaw[7] = { 0.0f };
    2. HMS_AREngine_ARPose_GetPoseRaw(arSession, cameraPose, poseRaw, 7);

AR Engine中,设备位姿由一个7维向量描述,包括旋转量

和位移量

。其中旋转量

是一组四元数,描述了设备相对于坐标原点的旋转状态;位移量是一组三维向量,描述了设备相对于坐标原点的平移状态,如下图所示。

图2设备位姿的旋转和平移变化示意图

通过旋转分量和平移分量,您可以完备的描述设备位姿在空间中任意时刻的位姿状态。

相关推荐
空白诗2 小时前
mdcat 在 HarmonyOS 上的构建与适配
后端·安全·华为·rust·harmonyos
百***35482 小时前
HarmonyOS在智能办公中的文档协作
华为·harmonyos
向哆哆7 小时前
深入理解华为 CANN 中的 Broadcast 算子实现:从底层机制到工程化落地
华为·算子·昇腾·cann
bin91537 小时前
幻境寻踪:Rokid AR眼镜上的沉浸式解谜冒险游戏开发实战
后端·ar·restful·沉浸式体验·ar游戏开发·rokid眼镜·解谜游戏
●VON10 小时前
在鸿蒙 PC 上使用 Electron 获取本机 IP 地址
tcp/ip·electron·harmonyos
汉堡黄11 小时前
鸿蒙开发:案例集合Tabs:tabs竖向粘性
harmonyos
威哥爱编程11 小时前
【鸿蒙开发实战篇】如何基于一多能力实现响应式布局
harmonyos·arkts·arkui
威哥爱编程11 小时前
【鸿蒙开发实战篇】如何实现高级图片滤镜
harmonyos·arkts·arkui
威哥爱编程11 小时前
【鸿蒙开发实战篇】强大的跨应用数据分享与应用内文件共享
harmonyos·arkts·arkui
威哥爱编程11 小时前
【鸿蒙开发实战篇】如何利用 3D渲染引擎实现高性能动态滤镜特效
harmonyos·arkts·arkui