美文网首页
web VR 功能 webxr API 接入指南

web VR 功能 webxr API 接入指南

作者: ansey | 来源:发表于2022-08-30 22:53 被阅读0次

webxr API

WebXR 设备 API提供对虚拟现实 (VR) 和增强现实 (AR) 设备相关的输入和输出功能的访问。它允许你在web上开发和托管 VR 、 AR 体验。

为什么要使用webxr API

为方便开发提供了如下能力:

  • 检测 XR 功能是否可用。
  • 查询 XR 设备能力。
  • 轮询 XR 设备和关联的输入设备状态。
  • 以适当的帧速率在 XR 设备上显示图像。

简易步骤

一、检查是否支持

//检查 navigator 中是否包含 xr
if ('xr' in navigator){
  //检查 沉浸式VR 是否支持
  navigator.xr.isSessionSupported('immersive-vr').then(function (supported) {
    console.log(`沉浸式VR 是否支持 = ${supported}`);
  });
}else {
  if (window.isSecureContext === false) {
    console.log(`WEBXR 需要 HTTPS`);
  } else {
    console.log(`WEBXR 不可用`);
  }
}

二、获取XRSession

let sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'layers'] };
//请求 获取XRSession 对象
const session = await navigator.xr.requestSession('immersive-vr', sessionInit);

三、XRSession相关事件监听

//XRSession 
let session: XRSession;
//XRSession 相关事件监听
session.addEventListener('select', onSessionEvent);
session.addEventListener('selectstart', onSessionEvent);
session.addEventListener('selectend', onSessionEvent);
session.addEventListener('squeeze', onSessionEvent);
session.addEventListener('squeezestart', onSessionEvent);
session.addEventListener('squeezeend', onSessionEvent);
session.addEventListener('end', onSessionEndSuc);
session.addEventListener('inputsourceschange', onInputSourcesChange);

四、初始化 XRWebGLLayer 设置 XRSession RenderState

//当前使用的canvas webgl上下文
const gl : WebGL2RenderingContext;
const attributes = gl.getContextAttributes();
//确保要使用canvas上下文与当前xr设备兼容。
if (!attributes.xrCompatible) {
      await gl.makeXRCompatible();
}

const layerInit = {
  antialias: (session.renderState.layers === undefined) ? attributes.antialias : true,
  alpha: attributes.alpha,
  depth: attributes.depth,
  stencil: attributes.stencil,
  framebufferScaleFactor: 1
};

//初始化 XRWebGLLayer
const glBaseLayer = new XRWebGLLayer(session, gl, layerInit);
//设置 RenderState
session.updateRenderState({
    baseLayer: glBaseLayer,
    depthFar: 1000,
    depthNear: 0,
    // inlineVerticalFieldOfView: 105
  });

五、 请求获取 XRReferenceSpace

//获取referenceSpace 
const referenceSpace = await session.requestReferenceSpace("local-floor");

六、 XRSession 启动 requestAnimationFrame 循环,XRFrame 获取view pose,调整相机,渲染。

const loop = (time: number, xrFrame: XRFrame)=>{
const pose = xrFrame.getViewerPose(referenceSpace);
        //同步 传感器到场景相机
        if (pose) {
            const views = pose.views;
            const isVR = views.length == 2;
            if (isVR) {
                //layer.framebuffer 存在时将 画面绘制到 layer.framebuffer
                gl.bindFramebuffer(gl.FRAMEBUFFER, glBaseLayer.framebuffer);
                for (let i = 0; i < 2; i++) {
                    //相机信息
                    const view = views[i];
                    //获取 设备 相机 viewport
                    const viewport = glBaseLayer.getViewport(view);
                    //设置到 webgl 上下文
                    gl.viewport(viewport.x, viewport.y , viewport.width , viewport.height );
                    //相机位移
                    view.transform.position;
                    //相机旋转
                    view.transform.orientation;
                    //相机投影矩阵
                    view.projectionMatrix;
                    //渲染一帧场景
                    renderSence();
                }

            }
  session.requestAnimationFrame(loop);
}

//启动循环
session.requestAnimationFrame(loop);

参考

相关文章

  • 一些学习资料

    iOS各种支付功能 :链接 其中:1支付宝app支付接入指南:链接2微信app支付接入指南:链接 Unity3d游...

  • 邮件发送注册验证码

    如何实现网站注册验证码邮件自动发送功能?如何接入邮件API接口?免费使用 网站通过接入邮件验证码接口(邮件api接...

  • 热修复 - 收藏集 - 掘金

    Tinker 接入指南 - Android - 掘金Tinker 接入指南 gradle接入 gr... Bugl...

  • 杂七杂八 - 收藏集 - 掘金

    Tinker 接入指南 - Android - 掘金Tinker 接入指南 gradle接入 gr... 非官方的...

  • 华为支付

    华为开发接入指南 华为应用内支付 In-App Purchase, IAP 方便开发者快速在应用中接入支付功能,并...

  • Web API 01

    Web API介绍 浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM) 此处的Web API特指浏...

  • 快速集成微信支付SDK

    传送门 微信支付 API 接入指南 Demo传送门 导入 SDK 到工程 1.创建 pod 文件 pod 'Wec...

  • 英雄案例笔记--httpClient

    内存 Web API: 在英雄指南范例中创建一个类 src/app/in-memory-data.service....

  • “易来”Life修改记录

    1.1.1版本: 实现号码测试功能 完成号码测试api接入,实现基本测试功能;基本功能 在测试结果中添加测试的号码...

  • Android 微信小程序打开app,app分享小程序到微信

    Android接入指南 官方接入指南 1、在build.gradle文件中,添加如下依赖: dependencie...

网友评论

      本文标题:web VR 功能 webxr API 接入指南

      本文链接:https://www.haomeiwen.com/subject/gzldnrtx.html