首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在任何网站上收听Oculus控制器事件。

在任何网站上收听Oculus控制器事件。
EN

Stack Overflow用户
提问于 2022-06-28 15:50:20
回答 1查看 227关注 0票数 3

网页是否可以简单地使用诸如document.addEventListener之类的通用javascript代码来侦听Oculus控制器的按钮按下。

默认情况下,在VR浏览器中,主拇指会上下滚动页面。其想法是重新映射它以触发不同的操作。

从我的研究看来,我需要使用一个A框架,但我正在寻找一个通用的解决方案,在不同的网站上只使用Vanilla Javascript,而不是在沉浸式的上下文中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-08 23:41:58

总之,没有。

不可能在沉浸式WebXR上下文之外与Oculus控制器进行接口。

WebXR API的输入和源部分指出:

虽然Gamepad记录是由Gamepad API规范定义的,但它实际上并不是由Gamepad API管理的。

因此,Gamepad API将无法工作,我们被迫使用Gamepad API。此外,我们被迫在webxr会话中使用一种沉浸式模式。WebXR控制器样本声明(确认了这一点,请参阅下面规则中的注释):

WebXR游戏垫在内联会话期间不可用。

话虽如此你还是可以..。

用最少的(香草) Javascript来做。

根据您对香草的定义,这将有效(码箱):

代码语言:javascript
复制
const gl2 = document
  .querySelector('canvas.c3d')
  .getContext('webgl2');
const session = await navigator.xr.requestSession('immersive-vr')
session.updateRenderState({ baseLayer: new XRWebGLLayer(session, gl2) });

const hookGamepadControls = () => {
  const gamepad = session?.inputSources?.[0]?.gamepad; //replace with code to choose appropriate input source/controller
  if (gamepad) {
    setInterval(scroll(gamepad), 30);
  }
};
session.requestAnimationFrame(hookGamepadControls);  //We can request a single frame and run a timer to poll controller, no need to request additional frames

获得Oculus或任何VR/AR/XR控制器/游戏垫显示时应遵循的最低规则:

  • 主要规则:
    • 我们不能在inline上下文中,只有immersive-vrimmersive-ar (否则source.gamepad将为空)。
    • 我们必须在框架上下文中(否则source.gamepad将为null)

  • 学院规则:
    • 我们必须将呈现状态连接到GL上下文(否则我们将无法接收动画帧)
    • 我们必须有一个画布元素(否则我们将无法获得GL上下文)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72789605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档