Как я могу получить направление камеры с помощью 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