问题标签 [openvr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
102 浏览

c++ - 在 3D 空间中跟踪 2D 坐标

我正在为我正在开发的虚拟现实游戏开发手势跟踪功能。我需要跟踪玩家的手坐标,以根据现有手势检查它们。我只想跟踪 X 和 Y。我的问题是获取 3D 坐标并将它们设为 2D。欢迎任何建议。谢谢你的时间。

0 投票
0 回答
42 浏览

unity3d - 在 VR 和普通(独立)模式之间切换时游戏冻结

大家好,我正在制作一款同时具有第一人称模式VR 模式的游戏。

直到现在我能够正确选择 VR 模式,但是在返回主菜单后我的游戏只是冻结了我不明白为什么?

我正在为我的菜单使用统一 GUI,并且我也在使用虚拟现实工具包(VRTK)

当我第一次从菜单中选择 FPS 模式然后返回并选择 vr 时一切正常,但当我从 vr 模式返回时它卡住了。

我观察到,当我选择 VR 模式时,unity UI 独立输入模块类会关闭,所以我启用了它,然后 UI 可以工作,但游戏仍然冻结

这是我用来打开设备的代码

0 投票
0 回答
330 浏览

orientation - Does OpenVR pre-process orientation data from Vive Trackers?

According to its specifications (page "11"|14), the Vive Tracker's coordinate system is right-handed Y-Up, X-Lateral, and the reference orientation is somehow determined from the area spanned by the HTC Vive base stations.

I am trying to align this coordinate system and reference orientation with an IMU (which uses a Z-Up, X-Lateral, RH-system and the magnetic north pole as reference), but when rotating the quaternion data I obtain from the Vive Tracker through the OpenVR C++ API in a way that it should match the IMU's coordinate system and reference, there is still some yaw component in the Tracker data when I perform a roll motion on both the IMU and the Tracker simultaneously.

Hence, does the OpenVR API do some orientation data pre-processing, so that quaternions received from OpenVR don't necessarily correspond to the device's coordinate system any more? Or may I be doing something else wrong?

0 投票
2 回答
2044 浏览

unity3d - 如何检测 Vive 基站的位置?

所以我对 Unity 和 VR 完全陌生,但对于一个项目,我需要检测基站的位置。

我试过用谷歌搜索,但由于我不知道所有的术语,我真的不知道在哪里寻找什么。

我能找到的只是如何检测控制器。

0 投票
1 回答
2649 浏览

android - 创建 Android - 控制器 - SteamVr 通信

我正在尝试做的是:我的智能手机将其方向(陀螺仪、加速器和磁力的融合)发送到控制器,控制器进一步处理数据以使其可以被 SteamVr 访问,这反过来又应该向我发送我想要发送的帧回到我的智能手机。

到目前为止我所取得的成就:我实现了一个基本的 android 程序,它已经捕获了它的方向,将它打包成一个 UDP 数据报并将它发送到给定的 IP 地址。

我编写了一个小型 Java 程序来验证它的功能,它已经可以工作了。

现在我想进入第 2 步:将此数据提供给 SteamVr。现在我不关心将视频流回安卓。

假设我想使用 C# 或 Java 等高级语言,有人可以帮我吗?我可以为此使用 OpenVr 吗?如果是,如何?(这没有很好的记录)。

编辑:

我有一个临时解决方案。我将使用 FreePie 通过 UDP 向 OpenTrack 发送方向(我已修改 FreePie.apk 以使结果更加平滑)。OpenTrack 通过 UDP 将其发送到 localhost。

我必须修改 SteamVr 以使用 Null-Driver 才能接受不存在的 HMD。

通过 Moonlight 进行 HeadTracking 和 Stream 效果很好,但现在还有另一个问题:当 SteamVR 启动全屏 HMD-Display-Window 时,我无法在任何游戏中使用常规输入。

游戏通常在一个单独的窗口中启动,该窗口接受输入,而 HMD 显示 VR 体验。现在,VR-Window 有一个大问题。当不在焦点上时,它既不显示也不接受来自 OpenTrack 的输入。这意味着没有视频,没有头部跟踪。有些游戏以 VR 模式启动,因此我可以使用此窗口获取键盘输入和视频,但如前所述,头部跟踪随后被禁用。

简而言之: - FreePie -> OpenTrack -> SteamVR NULL-Driver - Moonlight -> Android 适用于所有不需要输入的东西

这里唯一的解决方案是:第二个显示。- 将第二个显示设置为主。- 将所有内容移至第二个扩展显示器 - 启动 steamVR(将在第二个显示器中打开), - 开始游戏。现在,当焦点切换到 VR-Window 时,它突然出现在 PC 的主插入显示器上(仅在笔记本电脑 + 电视上测试过)。因此,Moonlight 将捕获视频,而第二个(当前主)屏幕聚焦在 GameWindow 上以捕获输入。

我的新问题是:如何解决对第二个显示器的需求?

0 投票
0 回答
521 浏览

opengl - 读取 Steam 控制器叠加层并将其渲染到 SteamVR 中的 VR 场景

背景

使用 Steam 控制器时,您可以将触摸板配置为在您开始触摸时显示在屏幕上的复杂菜单。这些菜单对于具有许多控件的游戏非常方便。它们看起来像这样:

径向菜单 触摸菜单

然而,在 SteamVR 中玩游戏时,这些叠加层都不会出现在 VR 中。它们仅出现在与其一起呈现的桌面窗口上。

这是已知的错误或缺失功能。我的目标是为它写一个修复程序。但事实证明这非常棘手。

我的问题

我知道如何在 OpenVR/SteamVR 中渲染叠加层。Valve 的文档对我来说已经足够了。但是我没有想出一个好的方法来捕捉绘制在游戏窗口顶部的叠加层。

我心里有两个想法。但我不知道如何正确实施它们。

捕获覆盖

我对 Steam 控制器叠加层的技术细节一无所知。但是,我认为它与 Steam Overlay 具有相同或非常相似的实现并不是一个糟糕的假设。

根据 Steamworks API 文档,Steam 会监听应用程序触发的 Present/SwapBuffers 调用并相应地刷新覆盖。(请参阅https://partner.steamgames.com/doc/api/ISteamUtils#BOverlayNeedsPresent)另外,我的猜测是 Steam 获取窗口的 hWnd,使用其 DC 创建一个 OpenGL 上下文并在每次收到 SwapBuffers 时呈现给它呼叫它正在听。

但这就是故事的结局。我不知道如何真正阅读 Steam 在上面渲染的内容。我曾想过将自己连接到 Steam 正在使用的绘图消息队列中,并在叠加层绘制之前和之后捕获在窗口上呈现的内容。我还想过欺骗 Steam,让其认为另一个具有绿色背景的窗口是它应该渲染到的窗口,然后只是捕获其内容。但这些只是外界的猜测。我不知道我将如何实现它。

使用色度键控

选定按钮具有非常特殊的平坦和不透明的蓝色调。我可以制作窗口的屏幕截图,然后只获取具有这种特定颜色的像素。劣势相当明显。所有其他区域都是半透明的,因此不适合色度键控。抗锯齿文本也是如此。幸运的是,您可以更改图标及其颜色,如下图所示。所以这会有点工作,但它会非常难看。

有人对我的问题有更好的想法或解决方案吗?

在此处输入图像描述

0 投票
1 回答
356 浏览

c# - openvr 如何正确获取轨道控制器(C#)

我正在使用带有 C# 的 openvr 并尝试获取控制器。

所有方法都需要控制器的“trackedDeviceIndex”,但我不确定如何以正确的方式获取此 ID。我查阅了文档,只能找到左手或右手的这种方法:

有没有更好的方法来获取列表中的所有跟踪控制器,还是我使用错误的方式?

0 投票
1 回答
497 浏览

virtual-reality - OpenVr:替代品和兼容性

我试图弄清楚 OpenVR API 的功能及其在 VR 内容开发中的确切作用。到目前为止,我了解到可以使用 OpenVR 开发游戏,以便在使用的硬件类型上灵活。

在这一点上,我有几个问题浮现在我的脑海:

  • 如果一个人不使用 OpenVR 来(比方说)统一开发游戏,他/她还能使用什么?统一的 Steam 插件是否使用 OpenVR?

  • 另外,如果我为一种新的 VR 游戏控制器开发 OpenVR 驱动程序,什么样的游戏会与我的新控制器兼容?

非常感谢

0 投票
1 回答
565 浏览

c# - 如何从 OpenVR 的 TrackedDevicePose_t 计算偏移位置?

我正在使用 Vive 控制器进行 3D 数字化。我正在使用 OpenVR 与硬件对话,并PollNextEventWithPose在用户按下按钮时获取控制器的姿势。从姿势中,我想计算一个沿 Z 轴 177mm 的点,即我们的数字化点所在的位置。

在 Unity 下运行,我做了这样的事情:

现在在 OpenVR 下,PollNextEventWithPose给我一个TrackedDevicePose_t包含mDeviceToAbsoluteTracking类型为的字段Valve.VR.HmdMatrix34_t。给定该矩阵,我如何计算沿 Z 轴的点?

0 投票
0 回答
184 浏览

c++ - openVR如何为播放器渲染2D帧

我从 hellovr_opengl 获取代码并会渲染 2D 帧。

在 openvr sdk 中,您应该在调用提交函数之前渲染。

我正在做的是生成纹理 m_itxture 然后在循环中我将 rdb 数据链接到 m_itexture。这是我的 renderFrame 的样子:

但我不知道如何在 RenderStereoTargets() 方法中将 m_itexture 链接到 leftEyeDesc.m_nResolveTextureId

有什么帮助吗?