THREEJS, получить положение VR гарнитуры и пользовательский рост - PullRequest
0 голосов
/ 26 октября 2019

Мне нужно получить положение и высоту пользователя 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 выглядит интересно).

...