Впервые на русском: Документация Oculus для разработчиков. Руководство ПК SDK для разработчика. Управление связью с виртуальной реальностью
Продолжаем публикацию эксклюзивной информации для разработчиков от Oculus. Новый раздел посвящён управлению связью с виртуальной реальностью.
- Документация Oculus для разработчиков:
- Введение в рекомендации
- Бинокулярное зрение, стереоскопическая визуализация и индикаторы глубины
- Поле зрения и масштаб
- Методы рендеринга
- Движение
- Отслеживание
- «Болезнь симуляции»
- Пользовательский интерфейс
- Пользовательский ввод и навигация
- Заключение
- Введение в SDK для ПК
- Руководство разработчика
- Руководство по началу работы с ПК SDK
- Руководство ПК SDK для разработчика. Интеграция LibOVR
- Инициализация и перечень сенсоров
- Рендеринг в Oculus Rift
- Расширенная настройка рендеринга
- Управление связью с виртуальной реальностью
- Система безопасности Oculus Guardian
- Аудио Oculus Rift
- Контроллеры Oculus Touch
- Дополнительная информация об Oculus Touch
- Примеры использования SDK и геймпада
- Оптимизация вашего приложения
- Подключение контроллеров Oculus Touch
- Асинхронный SpaceWarp
- Дополнительная информация о подключении контроллеров Oculus Touch
- Справочная информация
Чтобы оставаться в курсе новостей о виртуальной реальности, подписывайтесь на наш Telegram!
Когда вы отправляете своё приложение в Oculus, вы предоставляете приложение и метаданные, которые необходимы для его внесения в Oculus Store и запуска его из Oculus Home.
После запуска из Oculus Home вам необходимо написать цикл опроса состояния сеанса. ovr_GetSessionStatus возвращает структуру со следующими логическими значениями:
- ShouldQuit: True, если приложение должно инициировать завершение работы.
- HmdPresent: True, если шлем виртуальной реальности подключён.
- DisplayLost: True, если шлем виртуальной реальности был отключеё, или драйвер дисплея был отключен вручную, или обнаружен TDR.
- HmdMounted: True, если шлем виртуальной реальности находится на голове пользователя.
- IsVisible: True, если игра или приложение имеет запущена в виртуальной реальности и видна в шлеме виртуальной реальности.
- ShouldRecenter: True, если приложение должно вызвать ovr_RecenterTrackingOrigin. Это срабатывает, когда пользователь инициирует повторную попытку через Universal Menu «Универсальное меню».
Управление при завершении работы пользователя
Если ShouldQuit истинно, сохраните состояние приложения и выключите или выключите без сохранения состояния приложения. Пользователь автоматически вернется в Oculus Home.
В зависимости от типа приложения вы можете предложить пользователю начать с того места, где он остановился в следующий раз, когда приложение открыто (например, многоуровневая игра), или вы можете просто начать сначала (в случае с пассивным видео). Если это многопользовательская игра, вы можете выйти из игры локально, не прекращая игру.
Управление при повторном запросе пользователя
Если значение параметра ShouldRecenter истинно, приложение должно вызвать ovr_RecenterTrackingOrigin или ovr_SpecifyTrackingOriginи и быть готовым к предстоящему позиционному отслеживанию на основе другого источника.
У некоторых приложений может появиться причина проигнорировать запрос или выполнить его через внутренний механизм, отличный от ovr_RecenterTrackingOrigin. В таких случаях приложение может вызвать ovr_ClearShouldRecenterFlag для того, чтобы инициировать очистку запроса рецентра.
Управление неподключённым шлемом виртуальной реальности
Если DisplayLost истинно:
- Приостановите приложение, включая аудио.
- Выведите уведомление на монитор, в котором говорится, что шлем виртуальной реальности отключён.
- Уничтожьте любые те TextureSwapChains или зеркальные текстуры.
- Вызовите ovrDestroy.
- Инициируйте вызов ovrSessionStatus::HmdPresent до истинного значения.
- Вызовите ovrCreate для воссоздания сеанса.
- Создайте заново TextureSwapChains или зеркальные текстуры.
- Продолжите работу приложения.
Если ovrDetect не возвращается с истинным значением через определенное время, действуйте так, как если бы ShouldQuit возвратил его истинным. Если пользователь не предпринимает никаких действий после определенного периода времени, выберите действие по умолчанию (сохранить сеанс или закрыть без сохранения) и закройте приложение.
Примечание: Для многопользовательских игр вам может потребоваться один и тот же процесс без приостановки игры.
Управление недоступной гарнитурой
Когда пользователь удаляет шлем виртуальной реальности или если приложение имеет подключение к виртуальной реальности, функция HmdMounted или IsVisible возвращает значение как ложь. Остановите приложение до тех пор, пока оно не вернет значение истины.
Когда ваше приложение теряет связь с виртуальной реальностью, оно автоматически прекращает получать входные данные. Если ваше приложение не использует API ввода Oculus, ему нужно будет игнорировать любой полученный ввод информации.
Примечание: Для многопользовательских игр вы можете продолжить игру без паузы.
Управление потерей связи с Windows
Когда ваше приложение теряет связь с Windows, Oculus Remote, контроллер Xbox и контроллеры Oculus Touch будут продолжать работать в обычном режиме. Однако приложение потеряет контроль над мышью и клавиатурой.
Если ваше приложение теряет связь с Windows и сохраняет связь с виртуальной реальностью (IsVisible), продолжайте обработку вводимой информации и позволяйте приложению работать в обычном режиме. Если клавиатура или мышь необходимы для продолжения, попросите пользователя снять гарнитуру и использовать Alt-Tab для восстановления связь с Windows.
Сэмпл кода
bool shouldQuit = false; void RunApplication() { ovrResult result = ovr_Initialize(); if (OVR_SUCCESS(result)) { ovrSession session; ovrGraphicsLuid luid; result = ovr_Create(&session, &luid); if (OVR_SUCCESS(result)) { ovrSessionStatus ss; <create graphics device with luid> <create render target via ovr_CreateTextureSwapChain> while (!shouldQuit) { <get next frame pose, e.g. via ovr_GetEyePoses> <render frame> result = ovr_SubmitFrame(...); if (result == ovrSuccess_NotVisible) { <turn off audio output> do { // Wait until we regain visibility or should quit <sleep> result = ovr_GetSessionStatus(session, &ss); if (ss.ShouldQuit) shouldQuit = true; } while (OVR_SUCCESS(result) && !ss.IsVisible && !shouldQuit); <possibly re-enable audio> } else if (result == ovrError_DisplayLost) { // We can either immediately quit or do the following: <destroy render target and graphics device> ovr_Destroy(session); do { // Spin while trying to recreate session. result = ovr_Create(&session, &luid); } while (OVR_FAILURE(result) && !shouldQuit); if (OVR_SUCCESS(result)) { <recreate graphics device with luid> <recreate render target via ovr_CreateTextureSwapChain> } } else if (OVR_FAILURE(result)) { shouldQuit = true; } ovr_GetSessionStatus(session, &ss); if (ss.ShouldQuit) shouldQuit = true; if (ss.ShouldRecenter) { ovr_RecenterTrackingOrigin(session); // or ovr_ClearShouldRecenterFlag(session) to ignore the request. <do anything else needed to handle this> } } <destroy render target via ovr_DestroyTextureSwapChain> <destroy graphics device> ovr_Destroy(session); } ovr_Shutdown(); } }
Примечание: Данный материал представлен для ознакомления, при перепечатывании ссылка на оригинал обязательна. Если вы хотите принять участие в помощи проекту, пишите на editor@vrgeek.ru
Если вы разработчик и вы хотите продолжить свою карьеру в лучших компаниях России, пишите на editor@vrgeek.ru с пометкой «Работа мечты», и мы поможем вам с этим.