如何使用 webxr 获得相机世界方向?



我想使用camera.getWorldDirection()并访问头戴式显示器方向。我能够使用以前的webVR API做到这一点。当我使用THREE的新HelioWebXRPolyfill.js时,我无法获得当前职位。

调用renderer.xr.getCamera()似乎并没有完全复制camera.getWorldDirection()期望找到的各种相机成员属性。 我不确定这个问题的起源(也许是 polyfill?(,但您可以通过自己计算方向来解决它:

let xrCamera = this.renderer.xr.getCamera(sceneCamera)
let e = xrCamera.matrixWorld.elements
let direction = new THREE.Vector3(-e[8], -e[9], -e[10]).normalize()

我想出了一个简单的解决方法。只需将一个盒子作为相机的父级,然后使用相机盒代替相机即可。

camera.add( camerabox );

这不起作用:

var direction = new THREE.Vector3();
camera.getWorldDirection( direction );

这确实有效:

var direction = new THREE.Vector3();
camerabox.getWorldDirection( direction );

根据WebXR Device API,这应该使用XRViewerPose对象来完成。

此功能仅适用于 HTTPS。

全局变量

var cameraVector = new THREE.Vector3();  //define once and reuse it!

在渲染循环中

let xrCamera = renderer.xr.getCamera(camera);
xrCamera.getWorldDirection(cameraVector);
//heading vector for webXR camera now within cameraVector

最新更新