请选择您的所在地
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
España
Suisse
Suomi
Sverige
台灣
Ukraine
United Kingdom
United States
请选择您的所在地
België
Česká republika
Denmark
Iceland
Ireland
Italia
Latvija
Lietuva
Lëtzebuerg
Malta
Nederland
Norge
Polska
Portugal
España
Suisse
Suomi
Sverige

基于标记的位置共享 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 为 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.
提交
谢谢!您的反馈可以帮助其他人了解最有用的信息。