用途:在 three.js 项目中接入 WebXR,实现在浏览器中进入 VR/AR/XR 沉浸式会话。触发场景包括用户提到进入 VR/AR、navigator.xr、参考空间(reference space)、通过渲染器驱动会话的 requestAnimationFrame 循环,以及 VRButton、ARButton、XRButton、XRControllerModelFactory、手部追踪等。
主要能力:在渲染器上启用 XR(renderer.xr.enabled = true 模式);用官方按钮工厂创建 DOM 入口并处理会话结束;为 XR 使用 setAnimationLoop 渲染循环;通过控制器工厂挂载控制器模型并读取 gamepad 轴与按键;在运行时支持时选择启用手部模型;用 XREstimatedLight 提升 AR 真实感;会话结束后恢复非 XR 渲染循环与尺寸处理。
使用方式:需 HTTPS 并做 XR 可用性特性检测;按钮用官方工厂创建,并处理会话结束事件;XR 循环优先 setAnimationLoop;控制器模型经工厂附加,读取输入时做回退处理;手部模型按需开启并注意性能;光照方面 XREstimatedLight 需谨慎结合 threejs-lights;退出时恢复普通渲染循环与 resize 处理。相关文档见 WebXRManager、VRButton、ARButton、XRControllerModelFactory 页面。
适用场景:浏览器端 VR/AR 体验、沉浸式 3D 展示与交互。
限制与注意:范围仅限文档化的 WebXR 管理器及所列 addons,不涵盖商店提交、OpenXR 运行时细节与自定义原生层;桌面测试需 XR 模拟或硬件,应优雅降级;参考空间不匹配会导致地面偏移,需校验 stage 与 local-floor;重度后期处理链可能无法满足 VR 帧时间,需充分性能分析;浏览器与设备能力差异较大。回答时应尽量引用官方示例名与 three.js 版本。