Как я могу получить направление камеры с помощью webxr?

Я бы хотел использовать camera.getWorldDirection()и доступ к направлениям на головном дисплее. Я смог сделать это с помощью предыдущего API webVR. Когда я использую новыйHelioWebXRPolyfill.js из ТРИ я не могу получать текущие должности.

4 ответа

Кажется, что звонит renderer.xr.getCamera() не полностью копирует различные свойства элемента камеры, которые camera.getWorldDirection()ожидает найти. Я не уверен, откуда эта проблема (возможно, полифилл?), Но вы можете обойти ее, вычислив направление самостоятельно:

        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 );

Согласно API устройства WebXR, это следует делать с помощью объекта 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
Другие вопросы по тегам