Мне нужно получить положение и высоту пользователя VR (гарнитура, Oculus Quest).
У меня есть камера (контейнер с камерой).
Мне нужно объединить положение vr с положением смещения (управляемый контроллером).
Я пытался использовать navigator.getVRDisplays () (setup), а затем VrDisplay.getPose (). position (в методе рендеринга).
Но это выдает странноерендеринг артефактов / мерцание. THREEJS WebGLRenderer.vr.getController () дает неправильную позицию.
this._vrController1.addEventListener('axischanged', event => {
const axes = event.axes;
var y = Math.round(axes[1]);
if (y > 0) {
v.copy(direction)
.applyQuaternion(this.camera.quaternion);
this._vrPositionOffset.add(v.multiplyScalar(distance));
} else if (y < 0) {
v.copy(direction)
.applyQuaternion(this.camera.quaternion)
.negate();
this._vrPositionOffset.add(v.multiplyScalar(distance));
}
});
... render:
const renderer = this.renderers.WebGL.vr;
if (renderer.isPresenting() && this._vrDisplay) {
const pose = this._vrDisplay.getPose();
const p = pose.position.slice();
this.playerRig.position
.set(p[0], p[1], p[2])
.add(this._vrPositionOffset)
;
}
Движения не являются «естественными» без использования этой позы. Мне также нужна высота пользователя, чтобы настроить модель тела пользователя (масштаб). Я не нахожу эту информацию ни в объектах VrDisplay, ни в объектах WebGLRenderer.vr (VrDisplay.stageParameters.sittingToStandingTransform выглядит интересно).