请选择您的所在地
Australia
Österreich
België
Canada
Canada - Français
中国
Česká republika
Denmark
Deutschland
France
HongKong
Iceland
Ireland
Italia
日本
Korea
Latvija
Lietuva
Lëtzebuerg
Malta
المملكة العربية السعودية (Arabic)
Nederland
New Zealand
Norge
Polska
Portugal
Russia
Saudi Arabia
Southeast Asia
Suisse
Suomi
Sverige
台灣
Ukraine
United Kingdom
United States
请选择您的所在地
België
Česká republika
Denmark
Iceland
Ireland
Italia
Latvija
Lietuva
Lëtzebuerg
Malta
Nederland
Norge
Polska
Portugal
Suisse
Suomi
Sverige

基于标记的位置共享 API(一体机)

LBSS 提供了多个应用程序编程接口 (API) 以协助进行基于标记的位置共享
注:
  • 这些 API 只能与使用 VIVE Wave VR SDK 开发的兼容一体机 (AIO) 虚拟现实应用程序配合使用。有关用于 PC VR 应用程序的 API,请参见基于标记的位置共享 API (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 为 6688,且两个标记的大小均为 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.
提交
谢谢!您的反馈可以帮助其他人了解最有用的信息。