问题标签 [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 投票
1 回答
202 浏览

python-3.x - 无法对齐 2D 激光雷达点云以匹配 HTC Vive 控制器的坐标系

我将 RPLidar A1 绑在 HTC Vive 控制器上,并编写了一个 python 脚本,将激光雷达的点云转换为 XY 坐标,然后转换这些点以匹配 Vive 控制器的旋转和移动。最终目标是能够使用控制器作为跟踪来扫描 3D 空间。

可悲的是,我尝试的一切,triad_openvr 库的本机四元数,变换矩阵变换,甚至欧拉角,我根本无法让系统在所有可能的运动/旋转轴上运行。

预期结果是 3D 数据空间中正确定向的 2D 切片,如果附加,最终将映射整个 3D 空间。目前,我只成功地仅在单轴 Z 和俯仰旋转上进行扫描。我尝试了几乎无限数量的组合,一些在其他帖子中找到,一些基于原始线性代数,还有一些只是随机的。我究竟做错了什么?

0 投票
0 回答
239 浏览

opencv - 使用 OpenVR TrackedCamera 进行 OpenCV 立体校正和块匹配

我正在尝试创建由安装在 Valve Index VR 耳机上的立体相机创建的图像的视差图。我正在使用 OpenVR 和 OpenCV。OpenVR 允许使用 IVRTrackedCamera 接口访问摄像机。为了执行 OpenCV StereoBM,需要对左右图像进行校正。

我的第一个问题:
OpenVR 允许使用 GetVideoStreamFrameBuffer() 获取帧。此方法允许传递 EVRTrackedCameraFrameType,Distorted、Undistorted 或 MaximumUndistorted。不同的 FrameType 是什么意思?当使用 Undistorted 或 MaxUndistorted 帧类型时,我可以假设帧已经被校正到一个公共平面上吗?

第二个问题:
如果框架还没有被校正到一个公共平面上,怎么做?使用 OpenVR,我可以使用 GetCameraIntrinsics() 为每个单独的相机获取相机内在函数,再次提供 EVRTrackedCameraFrameType。我还可以使用 GetArrayTrackedDeviceProperty(Prop_CameraDistortionCoefficients_Float_Array) 获取每个相机的失真参数。现在,我为 OpenCV 的 stereoRectify() 缺少的两个参数是:

是否可以从 OpenVR 获取这些参数?

0 投票
0 回答
232 浏览

c++ - 如何使 OpenVR 多视图渲染工作?

我正在通过在我的自定义 C++ 引擎中实现多视图渲染来优化我已经工作的 VR 渲染,但无法让另一只眼睛进行渲染。这是我的顶点着色器:

如果我viewId用来选择转换矩阵,则会出现错误:

如果我不使用viewId我的另一只眼睛根本不会渲染。这是我设置帧缓冲区的方法,它有 2 层,在渲染左眼后,我将第二层复制到右眼。

这是我的VkPipelineVertexInputStateCreateInfo,我正在使用可编程顶点拉动:

如何修复错误并让右眼正常工作?我在 Vulkan SDK 1.1.126.0、Windows 10 上使用 HTC Vive、OpenVR 1.7.15、AMD R9 Nano、Vulkan 1.1。我已启用设备扩展VK_KHR_MULTIVIEW_EXTENSION_NAME

0 投票
0 回答
20 浏览

virtual-reality - 为什么 VRCapture 无法记录 openvr 的样本

帮助!为什么VRCapture无法记录openvr的样本(我测试过openvr-1.8.19和openvr-v.1.6.10b版本)?结果视频为黑色。但与我从 Steams 获得的其他 VR 游戏配合得很好。谢谢。

我的电脑:AMD Ryzen 7 1700X 八核 16G Geforce GTX 1070 Ti Windows 10 Pro 64 Visual Studio 2017 Community with windows SDK 10.0.17763.0

0 投票
1 回答
296 浏览

c++ - openvr:向视图方向移动

我正在用 openvr 和 opengl 编写一个应用程序,我希望相机朝着它所看的方向移动。因此,当您戴上头显并朝某个方向看时,虚拟相机应该朝那个方向飞行,这样您就可以四处移动。

因此,hmd 的位置由 openvr 提供并调用VRCompositor()->WaitGetPoses,这应该类似于视图矩阵的逆矩阵,所以如果我提取矩阵的第三列,我应该得到视图方向,然后我可以翻译我的模型矩阵沿该方向移动场景。

这似乎不是完全错误的,但这并不适用于所有方向。有时我向左看,但我被翻译到右边,反之亦然。这也发生在上/下,当我绕 z 轴旋转 hmd 时,平移会发生变化。

我还尝试按照本教程https://www.youtube.com/watch?v=QREKO1sf8b8进行统一,并且我使运动与统一一起工作,但我无法将代码转换回与我的 opengl 应用程序一起运行。我试图实现欧拉和四元数转换,但没有成功。

我觉得我需要用一个额外的矩阵来转换我的方向向量,所以它会一直指向正确的方向,但我无法弄清楚 o_o

有谁知道错误是什么,或者知道如何实施这项运动?

0 投票
3 回答
2275 浏览

c++ - 从欧拉角到四元数和反角的 GLM 转换不成立

我正在尝试将我存储为glm::vec3欧拉角的 OpenVR 控制器的方向转换为 aglm::fquat和返回,但是我得到了截然不同的结果,并且游戏中的行为是错误的(很难解释,但是物体在小范围的角度上表现正常,然后在奇怪的轴上翻转)

这是我的转换代码:

我希望eulerAnglesInDegreesandresult是相同方向的相同或等效表示,但显然情况并非如此。这些是我打印出来的一些示例值:

正如您在上面看到的,对于某些方向范围,转换是正确的,但对于其他方向范围则完全不同。

我究竟做错了什么?

我查看了现有的问题并尝试了一些事情,包括尝试此处列出的所有可能的旋转顺序共轭四元数以及其他随机的事情,例如翻转俯仰/偏航/滚动。没有给我预期的结果。

如何将欧拉角转换为四元数并返回,表示原始方向,使用glm


更多差异示例:

我试图找到一种模式来修复最终computed结果,但似乎没有一个容易识别的模式。


GIF + 行为视频:

视频摘录


我的直觉/当前理解的视觉表示:

视觉图

  • 上图是一个球体,我在中心。当我将枪对准球体的绿色一半时,方向是正确的。当我将枪对准球体的红色一半时,这是不正确的 - 似乎每个轴都颠倒了,但我不是 100% 肯定是这种情况。
0 投票
0 回答
405 浏览

c++ - 为什么 openvr GetPoseActionDataForNextFrame 没有获得控制器的位置

我正在尝试使用 OpenVR 和 OpenGL 创建简单的应用程序。耳机跟踪和渲染工作正常,但我没有得到控制器的位置。此处https://github.com/ValveSoftware/openvr/wiki/API-Documentation的示例代码有效,并且正在阅读我的控制器。我正在使用从该示例复制的 json 文件。这是我的代码的简化版本:

我错过了什么吗?

0 投票
1 回答
38 浏览

unity3d - OpenVR中基站位姿刷新率

我能够获得基站的位置,但这只会更新一次,而控制器和 HDM 会不断更新。有没有办法强制刷新,以便我可以实时获取基站的位置(跟踪参考)?谢谢!

0 投票
1 回答
621 浏览

c++ - 我应该如何获取要与 windows .exe 一起发布的配置文件的绝对路径?

我正在用 C++ 制作一个 Windows 应用程序。有一个需要配置文件的 API,以及该配置文件的绝对路径。(https://github.com/ValveSoftware/openvr/wiki/Action-manifest)。如果我了解发布可执行文件的预期做法,我会更容易对此进行推理。

我是否应该将 MyApp.exe 打包到一个名为 MyApp 的文件夹中,MyApp.exe 位于根目录,所有资源/配置都在它旁边?这是否意味着在运行时,从可执行文件中引用的所有相对路径都应该相对于 MyApp 文件夹?如何获取所有相对路径都相对的文件夹的绝对路径?(通过简单地将绝对路径与配置文件的相对路径连接起来,我可以得到配置文件的完整绝对路径,我应该控制它......)

编辑:澄清一下,API要求文件路径是绝对的。请参阅链接:“必须提供文件的完整路径;不接受相对路径。” 我不是在寻找让我不需要绝对文件路径的 c++ 解决方法:我需要找到一种方法来获取绝对文件路径,因为它是 API 的约束。

0 投票
1 回答
149 浏览

c++ - 无法理解 OpenVR 驱动程序 API

我的最终目标是制作一个 VRidge 轻量级克隆来理解 OpenVR API,但我很难理解如何让我的代码显示一些东西。作为一个起点,而不是我的手机,我想创建一个窗口作为 HMD(SFML,SDL,你可以命名它......)并让 SteamVR 在其中渲染 VR 视图。

我知道实现的对象IServerTrackedDeviceProvider是我的驱动程序设备的处理程序,ITrackedDeviceServerDriver是设备本身的接口,我怀疑我的“HMD”设备将不得不实现IVRDisplayComponent.

除了设置一些属性并使用回调来激活和停用我的设备之外,我不知道从哪里获得要在屏幕上显示的实际帧。我错过了什么?