[英]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.