合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
本章将依据以C++实现的示例代码,向您介绍如何快速使用AR Engine NDK接口开发您的应用。下图为使用AR Engine NDK接口开发应用的通用流程。本章节中给出了代码中关键步骤,详细实现请参见示例代码。

检查当前设备是否安装了AR Engine,若已经安装则正常运行,若没有安装,App应主动跳转应用市场,请求安装AR Engine。该部分代码在Java层通过调用NDK接口实现。具体实现代码如下:
- // 调用NDK接口检测是否安装了AR Engine。
- boolean isInstallArEngineApk = JniInterface.isArEngineApkInstalled(mNativeApplication, getApplicationContext());
-
- if (!isInstallArEngineApk) {
- // ConnectAppMarketActivity.class为跳转应用市场的Activity,具体实现请参见示例代码。
- startActivity(new Intent(this, com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));
- isRemindInstall = true;
- }
配置AR场景参数,示例代码在OnResume方法中调用NDK方法来启动AR场景:
- // 创建HwArSession。
- HwArSession_create(env, context, &mArSession);
-
- // 创建HwArConfig来配置HwArSession。
- HwArConfig *arConfig = nullptr;
- HwArConfig_create(mArSession, &arConfig);
- HwArSession_configure(mArSession, arConfig);
- // 创建完毕,销毁HwArConfig。
- HwArConfig_destroy(arConfig);
-
- // 开始运行,或在pause后恢复运行状态。
- HwArSession_resume(mArSession);
上述代码中,使用了默认配置来配置了运动跟踪(WORLD_AR)场景,您也可以定义您需要的场景,参见NDK API。在此过程中将会检查配置的参数是否支持,并返回执行状态HwArStatus,若配置成功,则通过HwArSession_resume即可启动当前的AR场景。
- // 获取帧数据HwArFrame。
- HwArSession_update(arSession, arFrame);
-
- // 根据HwArFrame对象可以获取相机对象HwArCamera。
- HwArCamera *arCamera = nullptr;
- HwArFrame_acquireCamera(arSession, arFrame, &arCamera);
-
- // 获取当前捕捉到的平面列表。
- HwArTrackableList *planeList = nullptr;
- HwArTrackableList_create(arSession, &planeList);
- HwArTrackableType planeTrackedType = HWAR_TRACKABLE_PLANE;
- HwArSession_getAllTrackables(arSession, planeTrackedType, planeList);
- // 创建命中检测结果列表。
- HwArHitResultList *hitResultList = nullptr;
- HwArHitResult_create(mArSession, &hitResultList);
-
- // 触发命中检测功能,获取命中检测结果列表并赋值给hitResultList。
- HwArFrame_hitTest(mArSession, mArFrame, eventX, eventY, hitResultList);
-
- // 创建命中结果对象。
- HwArHitResult *arHit = nullptr;
- HwArHitResult_create(mArSession, &arHit);
-
- // 从命中结果列表中取出最先命中的命中结果对象,并赋值给arHitResult。
- GetHitResult(arHitResult, hasHitFlag, hitResultListSize, trackableType, hitResultList);
-
- // 在命中检测结果对象上创建新锚点。
- HwArAnchor *anchor = nullptr;
- HwArHitResult_acquireNewAnchor(mArSession, arHitResult, &anchor);