【问题标题】:How to determine whether a SteamVR_TrackedObject is a Vive Controller or a Vive Tracker如何确定 SteamVR_TrackedObject 是 Vive 控制器还是 Vive 追踪器
【发布时间】:2017-04-03 12:24:04
【问题描述】:

确定SteamVR_TrackedObject 是否是 Vive 控制器和 Vive 跟踪器的最佳方法是什么?


当 0 个 Controller 和 1 个 Tacker 配对时:

Tracker 被视为Controller (right)CameraRig

当 1 个 Controller 和 1 个 Tacker 配对时:

跟踪器设置为设备 2。

当 2 个 Controller 和 1 个 Tacker 配对时:

创建第三个SteamVR_TrackedObject 并将其放入CameraRigobjects 数组中。同样,当控制器失去跟踪时,跟踪器也会失去跟踪。


在每种情况下,Tracker 最终都是不同的SteamVR_TrackedObject.index。检查SteamVR_TrackedObject 是否是跟踪器或找出跟踪器是哪个index 的最佳方法是什么?

【问题讨论】:

  • 你考虑过使用triggers吗?
  • @Hristo 你能扩展一下吗?我不确定你是什么意思?如果您要检查对象是否具有触发按钮,那么它将不起作用。因为跟踪器有针脚(连接一些东西作为触发器)并使用与控制器相同的协议。
  • 天哪,对不起,我想说tags
  • 在开始之前标记某些游戏对象?问题是每个SteamVR_TrackedObject 都被动态设置为一个设备,我无法预测它将如何分配。寻找与 SteamVR 和 OpenVR API 对话的最佳方法。
  • 是的,您可以将不同的tags 分配给不同的GameObjects,这样您就可以区分它们。至少从我对你的标题的理解来看。引用:“是 Vive 控制器或 Vive 跟踪器”。

标签: c# unity3d virtual-reality htc-vive openvr


【解决方案1】:

我发现的检查SteamVR_TrackedObject的唯一方法是检查ETrackedDevicePoperty.Prop_RenderModelName_String

uint index = 0;
var error = ETrackedPropertyError.TrackedProp_Success;
for (uint i = 0; i < 16; i++)
{
    var result = new System.Text.StringBuilder((int)64);
    OpenVR.System.GetStringTrackedDeviceProperty(i, ETrackedDeviceProperty.Prop_RenderModelName_String, result, 64, ref error);
    if (result.ToString().Contains("tracker"))
    {
        index = i;
        break;
    }
}

然后可以将SteamVR_TrackedObject.index设置为索引:

GetComponent<SteamVR_TrackedObject>().index = (SteamVR_TrackedObject.EIndex)index;

到目前为止,要找到有关这方面的任何文档都相当困难,但这里有一些资料来源:

【讨论】:

  • 爱它。另请注意,Oculus 触摸控制器名称将包含“controller_left”和“controller_right”。
【解决方案2】:

刚刚偶然发现这个老问题,我猜当被问到时,接受的答案是完全正确的——不过现在有一种直接的方法:你可以使用GetTrackedDeviceClass

它将返回枚举值ETrackedDeviceClass。可能的值是:

  • Invalid - 如果此索引下没有被跟踪的设备,
  • HMD - 如果设备是耳机,
  • Controller - 如果设备是控制器 - 这是您的情况之一,
  • GenericTracker - 这是你的另一个案例
  • TrackingReference - 用于基站,支持摄像头等,
  • DisplayRedirect - 文档 - “不一定会自行跟踪,但可能会重定向来自其他被跟踪设备的视频输出的附件”
  • Max - 这个是无证的,我还没有偶然发现它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多