场景
用户进入immersive-vr模式时,重置参考空间为用户头戴看向的位置和方向
实现
useFrame((state: RootState, delta: number, frame?: THREE.XRFrame) => {
if (flag.current && frame) {
const baseReferenceSpace: XRReferenceSpace = gl.xr.getReferenceSpace();
const viewerPose = frame?.getViewerPose(baseReferenceSpace);
const newReferenceSpace: XRReferenceSpace =
baseReferenceSpace.getOffsetReferenceSpace(viewerPose.transform);
gl.xr.setReferenceSpace(newReferenceSpace);
flag.current = false;
}
});
存在问题
上述设置存在一个问题,重置后的参考空间类型仍旧为local-floor,但用户的高度变了,初步分析原因为在重置参考空间local-floor之后需要重设用户高度,可采取的办法如下:
- 从系统层获取用户高度
- 已知viewerPose的XRRigidTransform的结构如下,可通过new XRRigidTransform调整参考空间的位置减去用户高度:
写在后面
对于当前存在的高度问题,我的理解可能是错误或者片面的,有比较了解的同学欢迎评论交流指正!