0 序
開始用 HTC Vive 做項目,由于 OpenVR 并沒有提供用于 Unity3D 的 C? 文檔(只提供了 C++ API 文檔),所以想寫一個“第三方”的 OpenVR C? API 文檔,借此機會提高姿勢和水平。
由于作者的水平相當低,可想而知接下來一定會遇到眾多問題,望讀者海涵,如果有什么寫得不對的地方請一定指出并往死里噴我,教我人生的經驗。雖然我認為沒人會讀這東西。
1 對于OpenVR的初步認識
OpenVR 是由 Valve 公司開發的一套 VR 設備通用 API ,換而言之不管是 Oculus Rift 或 HTC Vive 甚至是其他 VR 設備,都不再需要使用產商提供的 SDK 就可以進行開發,有種打算一統天下的范兒。這套 API 并未開源所以具體實現未知。(由于 Vive 和 Oculus Rift 的原理看似一樣但是其實對于畫面的處理大相徑庭,根據我大膽的瞎猜,我認為這套 API 只是幫我們在原先設備產商提供的 SDK 上又實現了一個能夠通過統一接口訪問的抽象層來,應該不是什么黑科技大概)
OpenVR 文件夾的結構大致如下:
\openvr
\bin 用于各平臺的dll、pdb文件
\headers 用于 C++(.h) 和 C?(.cs) 的頭文件
(是根據本文件夾下的 openvr_api.json 自動生成的,不要手動編輯)
\lib 用于各平臺的lib文件
\samples C++、Unity 范例
\unity_package 用于 Unity 的 Package
unity_package 是之后研究的重點。
2 OpenVR Unity Package
OpenVR Unity Package 包含以下腳本內容:
- \Plugins
- openvr_api.cs
- \SteamVR
- \Editor
- SteamVR_Editor.cs
- SteamVR_RenderModelEditor.cs
- SteamVR_Settings.cs
- SteamVR_SkyboxEditor.cs
- SteamVR_Update.cs
- \Scripts
- SteamVR.cs
- SteamVR_Camera.cs
- SteamVR_CameraFlip.cs
- SteamVR_CameraMask.cs
- SteamVR_Controller.cs
- SteamVR_ControllerManager.cs
- SteamVR_Ears.cs
- SteamVR_ExternalCamera.cs
- SteamVR_Fade.cs
- SteamVR_Frustum.cs
- SteamVR_GameView.cs
- SteamVR_IK.cs
- SteamVR_LoadLevel.cs
- SteamVR_Menu.cs
- SteamVR_Overlay.cs
- SteamVR_PlayArea.cs
- SteamVR_Render.cs
- SteamVR_RenderModel.cs
- SteamVR_Skybox.cs
- SteamVR_SphericalProjection.cs
- SteamVR_Stats.cs
- SteamVR_Status.cs
- SteamVR_StatusText.cs
- SteamVR_TestController.cs
- SteamVR_TrackedObject.cs
- SteamVR_UpdatePoses.cs
- SteamVR_Utils.cs
- \Extras
- SteamVR_GazeTracker.cs
- SteamVR_LaserPointer.cs
- SteamVR_Teleporter.cs
- SteamVR_TestThrow.cs
- SteamVR_TrackedController.cs
- \Editor
事實上,只有 \Plugins
中的 open_api.cs
是直接與 OpenVR 打交道的,是它把 OpenVR 所有的 API 都暴露出來,并且聲明了一些用于與其進行交換的數據結構。
\Scripts
下是官方為我們實現的一些能夠處理 OpenVR 中的原始數據的方法,和能夠方便的在 Unity 中調用的方法,官方的說法是“推薦我們修改并提出反饋”(You are encouraged to modify these to suit your project's unique needs, and provide feedback),當然,我們這次的主題是看懂它,所以不作修改就我這水平,能看懂就不錯了。
用過Unity的都知道 \Editor
下是一些編輯器腳本,\Extras
下是一些簡單的應用,所以就不多提了。不過值得一說的是,Valve 還寫了一個自動檢測 Project Settings 等設置是否有問題且能夠一鍵自動配置的編輯器擴展工具,簡直比 Oculus 高到不知道哪里去了。
至于詳細內容請參看 readme 此處不再敘述。
下一篇,我們主要研究 openvr_api.cs
,了解 class OpenVR{}
中的方法。