[英]Trouble understanding OpenVR driver API
我的最终目标是制作一个 VRidge 轻量级克隆来理解 OpenVR API,但我很难理解如何让我的代码显示一些东西。 作为一个起点,而不是我的手机,我想创建一个 window 作为 HMD(SFML,SDL,你的名字......)并让 SteamVR 在其中渲染 VR 视图。
我知道实现IServerTrackedDeviceProvider
的 object 是我的驱动程序设备的处理程序, ITrackedDeviceServerDriver
是设备本身的接口,我怀疑我的“HMD”设备必须实现IVRDisplayComponent
。
除了设置一些属性并使用回调来激活和停用我的设备之外,我不知道从哪里获得要在屏幕上显示的实际帧。 我错过了什么?
你几乎是对的。
继承vr::IServerTrackedDeviceProvider
的 class (我稍后将其称为设备父级)负责注册和维护设备的生命周期(创建、注册等)
在设备父设备注册后继承vr::ITrackedDeviceServerDriver
的类被视为被跟踪设备,设备类型由设备父设备在注册时设置,同样在 HMD 设备GetComponent()
方法需要返回显示组件的情况下,如果请求, 对于其他设备,它可以只返回NULL
GetComponent()
接收带有组件名称和版本的 c 字符串,例如存储在vr::IVRDisplayComponent_Version
中的"IVRDisplayComponent_002"
,如果设备具有匹配名称版本对的组件,则需要返回指向它的指针,如果没有找到匹配返回NULL
同样关于组件,在 Valve 以非常懒惰和糟糕的方式提供其完成的驱动程序示例中,请勿将组件继承到您的设备类
将您的组件分割成您在设备中初始化的单独对象,并相应地在GetComponent()
中返回它们
现在,让 SteamVR 正确识别和使用您的设备的唯一事情就是注册它们,但有一个问题,您需要在注册时指定设备类型,方法是传递来自vr::ETrackedDeviceClass
枚举的值之一(当您查看枚举时,这些应该是不言自明的)
当然,这并不是 openvr 驱动程序的全部内容,为了让所有这些都正常工作,并且 SteamVR 甚至要确认您的驱动程序的存在,您需要实现一个HmdDriverFactory()
function,它类似于GetComponent()
,除了您将输入 c 字符串与提供者名称版本对,如果是设备父级,则为vr::IServerTrackedDeviceProvider_Version
,如果匹配,则返回指向设备父级实例或您实现的任何其他提供者的指针
几点注意事项:
openvr_driver.h
ValveSoftware/openvr
问题跟踪器和其他使用 openvr 驱动程序的人(即使只有少数......)这不是对 openvr 驱动程序如何工作的最佳解释,因此欢迎您在评论中询问更多详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.