地平面API概述

地平面功能检测并跟踪环境中命中测试的平面和锚。

使用地平面,您可以使用固定到平面或在空中的锚将任何数字内容放置在水平表面上。将数字内容放置在锚定目标观察器中,该观察器负责检测表面的hitTest和在世界空间中创建6个自由度锚点。随着世界空间的增长和地面会话中的变化,锚定观测将不断从锚定点生成状态信息。世界空间由设备姿势观测器提供,必须启用才能使用此功能。

常规设置

请参阅Vuforia发动机生命周期有关Vuforia引擎生命周期的一般介绍,因为创建和使用观察员需要引擎。

创建锚观察员

要在环境中成功跟踪和创建锚,必须首先创建并激活锚目标观测器。这是通过将设备姿势观测器与锚点配置关联来实现的。要创建设备姿势观测器,请参阅设备跟踪

//创建锚配置VuAnchorObserverConfig主播ObserverConfiguration=vuAnchor ObserverconfigDefault();anchorObserverConfig.devicePoseObserver=设备位置观察员;//附属国//创建锚观察员VuObserver*anchorObserver={NULL};vuEngineCreateAnchorObserver(引擎,&anchorOwserver,anchor观察员配置,空);

上面的代码片段首先使用默认值创建锚配置。设备姿势观察员必须创建和激活锚。默认情况下,创建时会激活锚定目标观测器。

创建观测器后,您可以启动引擎,等待设备姿势观测器初始化并开始跟踪世界空间。然后,可以从锚定目标观测器创建锚定,并将内容呈现到该位置。

从姿势创建锚点

//创建锚点VuAnchorCreationConfig anchorConfig={};//仅使用世界定位点的平移设置姿势anchorConfig.pose=vuMatrix44FTRSMatrix(myTrans,0.0f,vuIdentityVector3F(),vuId Vector3f());int32_t锚Id={0};vuAnchorObserverCreateAnchor(主持人观察员,&anchorId,anchorConfig);

或者,使用VuAnchorCreationHitTestConfig如下所述。

从hitTest创建锚点

使用光线投射和用户交互,通过在世界空间的水平平面上进行光线投射来识别合适的曲面。这通常由屏幕上的用户交互来执行。命中测试将近似于设备高度设备和平面之间的米数:

VuAnchorCreationHitTestConfig主播WithHitTestConfig{hitTest};int32_t锚Id=0;vuAnchorObserverCreateAnchorWithHitTest(观察员,&anchorWith HitTestConfig,&ancorId);

无法在设备姿势观测器初始化之前或期间执行hitTest,如其状态信息所示VuDevicePoseObservation状态信息()

注:命中测试应使用与帧渲染相同的状态vuHit测试获取姿势要准确。

在空中创建锚点

要在地平面上方创建锚点,可以让用户交互(例如在屏幕上轻敲)从姿势触发锚点创建:

//从自定义方法检索最新缓存的设备姿势auto latestDevicePoseData=获取最新设备PoseData();const VuMatrix44F&latestDevicePose=最新设备位置数据.mPose;auto-anchorConfig=vuAnchorCreationConfigDefault();anchorConfig.pose=最新DevicePose;int32_t锚Id=0;vuAnchorObserverCreateAnchor(观察员,&anchorConfig,&ancorId);

Fusion提供商平台

这个VuHitTestConfig(VuHit测试配置)取决于设备的活动Fusion提供商。它的意思是vu平台控制器获取融合提供程序类型()将确定是否设备高度是否使用。

观察

锚定目标观测者生成在州内收集的观测值。从州政府或从锚定目标观测者的托管锚获取锚定观测值。

创建观察列表

//创建观察列表VuObservationList*obsList={NULL};vuObserverationListCreate(&obsList);//获取并分析锚定目标观测值列表vuStateGetAnchorObservations(状态,obsList);int32_t列表大小=0;vuObservationListGetSize(obsList,&listSize);

然后,解析观察列表以获取锚定目标的状态信息。

//分析锚定列表for(int i=0;i<listSize;i++){VuObservation*obs={NULL};vuObservationListGetElement(obsList,i,&obs);VuPoseInfo poseInfo;vuObservationGetPoseInfo(obs,&poseInfo);if(poseInfo.poseStatus!=观测值_POSE_STATUS_NO_POSE){//用poseInfo做点什么}}

您还可以替换vuObservation列表创建vu观测获取位置信息使用以下方法从hitTest中获取姿势。

vuHitTestListCreate(VuHit测试列表**列表);vuHitTestGetPose(const VuHitTest*hitTest,VuMatrix44F*姿势);

摧毁观察员和观察

使用后销毁“观察者”和“观察”列表以释放内存。

摧毁锚观察员。

vuAnchorObserverDestroyAnchor(观察员,主持人Id);//或摧毁所有锚vuAnchorObserverDestroyAnchors(观察员);

销毁hitTest列表

vuHitTestListDestroy(VuHit测试列表*列表);