问题标签 [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.
python-3.x - 无法对齐 2D 激光雷达点云以匹配 HTC Vive 控制器的坐标系
我将 RPLidar A1 绑在 HTC Vive 控制器上,并编写了一个 python 脚本,将激光雷达的点云转换为 XY 坐标,然后转换这些点以匹配 Vive 控制器的旋转和移动。最终目标是能够使用控制器作为跟踪来扫描 3D 空间。
可悲的是,我尝试的一切,triad_openvr 库的本机四元数,变换矩阵变换,甚至欧拉角,我根本无法让系统在所有可能的运动/旋转轴上运行。
预期结果是 3D 数据空间中正确定向的 2D 切片,如果附加,最终将映射整个 3D 空间。目前,我只成功地仅在单轴 Z 和俯仰旋转上进行扫描。我尝试了几乎无限数量的组合,一些在其他帖子中找到,一些基于原始线性代数,还有一些只是随机的。我究竟做错了什么?
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 获取这些参数?
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
。
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
c++ - openvr:向视图方向移动
我正在用 openvr 和 opengl 编写一个应用程序,我希望相机朝着它所看的方向移动。因此,当您戴上头显并朝某个方向看时,虚拟相机应该朝那个方向飞行,这样您就可以四处移动。
因此,hmd 的位置由 openvr 提供并调用VRCompositor()->WaitGetPoses
,这应该类似于视图矩阵的逆矩阵,所以如果我提取矩阵的第三列,我应该得到视图方向,然后我可以翻译我的模型矩阵沿该方向移动场景。
这似乎不是完全错误的,但这并不适用于所有方向。有时我向左看,但我被翻译到右边,反之亦然。这也发生在上/下,当我绕 z 轴旋转 hmd 时,平移会发生变化。
我还尝试按照本教程https://www.youtube.com/watch?v=QREKO1sf8b8进行统一,并且我使运动与统一一起工作,但我无法将代码转换回与我的 opengl 应用程序一起运行。我试图实现欧拉和四元数转换,但没有成功。
我觉得我需要用一个额外的矩阵来转换我的方向向量,所以它会一直指向正确的方向,但我无法弄清楚 o_o
有谁知道错误是什么,或者知道如何实施这项运动?
c++ - 从欧拉角到四元数和反角的 GLM 转换不成立
我正在尝试将我存储为glm::vec3
欧拉角的 OpenVR 控制器的方向转换为 aglm::fquat
和返回,但是我得到了截然不同的结果,并且游戏中的行为是错误的(很难解释,但是物体在小范围的角度上表现正常,然后在奇怪的轴上翻转)。
这是我的转换代码:
我希望eulerAnglesInDegrees
andresult
是相同方向的相同或等效表示,但显然情况并非如此。这些是我打印出来的一些示例值:
正如您在上面看到的,对于某些方向范围,转换是正确的,但对于其他方向范围则完全不同。
我究竟做错了什么?
我查看了现有的问题并尝试了一些事情,包括尝试此处列出的所有可能的旋转顺序、共轭四元数以及其他随机的事情,例如翻转俯仰/偏航/滚动。没有给我预期的结果。
如何将欧拉角转换为四元数并返回,表示原始方向,使用glm
?
更多差异示例:
我试图找到一种模式来修复最终computed
结果,但似乎没有一个容易识别的模式。
GIF + 行为视频:
我的直觉/当前理解的视觉表示:
- 上图是一个球体,我在中心。当我将枪对准球体的绿色一半时,方向是正确的。当我将枪对准球体的红色一半时,这是不正确的 - 似乎每个轴都颠倒了,但我不是 100% 肯定是这种情况。
c++ - 为什么 openvr GetPoseActionDataForNextFrame 没有获得控制器的位置
我正在尝试使用 OpenVR 和 OpenGL 创建简单的应用程序。耳机跟踪和渲染工作正常,但我没有得到控制器的位置。此处https://github.com/ValveSoftware/openvr/wiki/API-Documentation的示例代码有效,并且正在阅读我的控制器。我正在使用从该示例复制的 json 文件。这是我的代码的简化版本:
我错过了什么吗?
unity3d - OpenVR中基站位姿刷新率
我能够获得基站的位置,但这只会更新一次,而控制器和 HDM 会不断更新。有没有办法强制刷新,以便我可以实时获取基站的位置(跟踪参考)?谢谢!
c++ - 我应该如何获取要与 windows .exe 一起发布的配置文件的绝对路径?
我正在用 C++ 制作一个 Windows 应用程序。有一个需要配置文件的 API,以及该配置文件的绝对路径。(https://github.com/ValveSoftware/openvr/wiki/Action-manifest)。如果我了解发布可执行文件的预期做法,我会更容易对此进行推理。
我是否应该将 MyApp.exe 打包到一个名为 MyApp 的文件夹中,MyApp.exe 位于根目录,所有资源/配置都在它旁边?这是否意味着在运行时,从可执行文件中引用的所有相对路径都应该相对于 MyApp 文件夹?如何获取所有相对路径都相对的文件夹的绝对路径?(通过简单地将绝对路径与配置文件的相对路径连接起来,我可以得到配置文件的完整绝对路径,我应该控制它......)
编辑:澄清一下,API要求文件路径是绝对的。请参阅链接:“必须提供文件的完整路径;不接受相对路径。” 我不是在寻找让我不需要绝对文件路径的 c++ 解决方法:我需要找到一种方法来获取绝对文件路径,因为它是 API 的约束。
c++ - 无法理解 OpenVR 驱动程序 API
我的最终目标是制作一个 VRidge 轻量级克隆来理解 OpenVR API,但我很难理解如何让我的代码显示一些东西。作为一个起点,而不是我的手机,我想创建一个窗口作为 HMD(SFML,SDL,你可以命名它......)并让 SteamVR 在其中渲染 VR 视图。
我知道实现的对象IServerTrackedDeviceProvider
是我的驱动程序设备的处理程序,ITrackedDeviceServerDriver
是设备本身的接口,我怀疑我的“HMD”设备将不得不实现IVRDisplayComponent
.
除了设置一些属性并使用回调来激活和停用我的设备之外,我不知道从哪里获得要在屏幕上显示的实际帧。我错过了什么?