基于标记的位置共享 APIs (一体机)
LBSS 提供了多个应用程序编程接口(API)以协助进行基于标记的位置共享。
注:
-
这些 API 只能用于使用 VIVE Wave VR SDK 开发的兼容一体机(AIO)虚拟现实应用程序。有关用于 PC VR 应用程序的 API,请参见基于标记的位置共享 APIs (PC VR)。
-
创建标记时使用 VIVE ArUco 标记生成工具生成的 JSON 文件 markers_list_escape.json 包含以下 API 所需的标记信息。有关详细信息,请参见ArUco 标记 JSON 文件。
配置标记 ID 和字典
为一个或两个 ArUco 标记配置标记 ID 和字典。在配置两个标记时,用户扫描第二个标记后,位置共享才会开始。
一个 ArUco 标记
在此示例中,标记 ID 为 66,标记大小为 0.280。此标记大小值对应于每边测量 280 毫米的标记。
string polling_value; string key = "PLAYER00InitMA"; key += "{\"marker1\": {\"id\": 66,\"behavior\": 3,\"size\": 0.280}}"; uint RETURN_SIZE = 256; IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE)); Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE); polling_value = Marshal.PtrToStringAnsi(value); Marshal.FreeCoTaskMem(value); if(string.Compare(polling_value, "InitErr") == 0) // Handles the case where initialization failed.Check the configuration string to determine the cause of the error and write the appropriate error handling code. { // Write your error handling code here. } |
两个 ArUco 标记
在此示例中,标记 ID 为 66 和 88,且两个标记的大小均为 0.280。
string polling_value; string key = "PLAYER00InitMA"; key += "{\"marker1\": {\"id\": 66,\"behavior\": 3,\"size\": 0.280,\"isMainMarker\": true,\"pairMarkerID\": 88},\"marker2\": {\"id\": 88,\"behavior\": 0,\"size\": 0.280,\"isMainMarker\": false,\"pairMarkerID\": 66}}"; uint RETURN_SIZE = 256; IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE)); Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE); polling_value = Marshal.PtrToStringAnsi(value); Marshal.FreeCoTaskMem(value); if(string.Compare(polling_value, "InitErr") == 0) // Handles the case where initialization failed.Check the configuration string to determine the cause of the error and write the appropriate error handling code. { // Write your error handling code here. } |
扫描标记
提示头戴式设备的追踪引擎检测 ArUco 标记并处理数据。
string key = "ClearRecenterXform"; Interop.WVR_SetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key)); // This clears the recenter transform for the headset and other tracking devices or objects.You can also manage each device separately, but this is not necessary for most applications. key = "PLAYER00StartScan"; uint RETURN_SIZE = 256; IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE)); Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE); Marshal.FreeCoTaskMem(value); |
停止扫描并重置位置
停止扫描过程并将头戴式设备位置重置为默认参数。
string key = "PLAYER00StopScan"; uint RETURN_SIZE = 256; IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE)); Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE); Marshal.FreeCoTaskMem(value); |
查看扫描状态(选填)
定期检查最新扫描的状态。
注: 为了避免影响系统性能,请不要将检查频率设置为每秒两次以上。
string key = "PLAYER00CheckMA"; uint RETURN_SIZE = 256; IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE)); Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE); string polling_value = Marshal.PtrToStringAnsi(value); Marshal.FreeCoTaskMem(value); if (string.Compare(polling_value, "CTdone") == 0) { // Handles the case where all markers have been scanned. } else if (string.Compare(polling_value, "CTpass") == 0) { // Handles the case where the 1st marker has been scanned, if you are using 2 markers.Remove this code if you are using 1 marker. } |
继续位置共享
当您在开始期间退出应用程序时,位置共享将停止,头戴式设备位置将重置为默认参数。此 API 在您重新打开应用程序后恢复位置共享,并使用最新可用的位置共享数据恢复头戴式设备的位置。
string key = "PLAYER00CheckMA"; uint RETURN_SIZE = 256; IntPtr value = Marshal.AllocHGlobal(new IntPtr(RETURN_SIZE)); Interop.WVR_GetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key), value, RETURN_SIZE); string polling_value = Marshal.PtrToStringAnsi(value); Marshal.FreeCoTaskMem(value); if (string.Compare(polling_value, "CTdone") == 0) { key = "ClearRecenterXform"; Interop.WVR_SetParameters(WVR_DeviceType.WVR_DeviceType_HMD, Marshal.StringToHGlobalAnsi(key)); // This clears the recenter transform for the headset and other tracking devices or objects.You can also manage each device separately, but this is not necessary for most applications. |
此内容对您有帮助吗?
是
否
谢谢!您的反馈可以帮助其他人了解最有用的信息。