Мы используем файлы cookie, чтобы упростить навигацию на этом сайте. Если вы даете свое согласие на использование файлов cookie и обработку ваших персональных данных, нажмите «Принимаю».

v3d.FirstPersonControls и constrainVertical

Домой Форумы Для программистов v3d.FirstPersonControls и constrainVertical

  • В этой теме 2 ответа, 2 участника, последнее обновление 4 года назад сделано webgl.
Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Автор
    Сообщения
  • #15658
    webgl
    Customer

    Во встроеном FPS управлении нет ограничителей вертикального поворота. Как лучше поступить, попробовать добавить ограничители в v3d.FirstPersonControls или проще взять THREE.FirstPersonControls и добавить туда работу с колиженами?

    #15665

    Я думаю проще добавить ограничения к контролам движка. Можно вот такой функцией:

    
    function setupVertCons(camera, verticalMin, verticalMax) {
        var ctl = camera.controls;
        if (ctl !== null) {
            ctl.constrainVertical = true;
            ctl.verticalMin = verticalMin;
            ctl.verticalMax = verticalMax;
    
            var CAM_VIEW_LOCAL = new v3d.Vector3(0, 0, -1);
            var _dir = new v3d.Vector3();
            var _sph = new v3d.Spherical();
    
            ctl.updateVertCons = function() {
                if (ctl.constrainVertical) {
                    _dir.copy(CAM_VIEW_LOCAL).applyQuaternion(camera.quaternion).normalize();
                    _sph.setFromVector3(_dir);
                    _sph.phi = v3d.MathUtils.clamp(_sph.phi, ctl.verticalMin,
                            ctl.verticalMax);
                    _sph.makeSafe();
    
                    _dir.setFromSpherical(_sph);
                    _dir.add(camera.position);
                    camera.lookAt(_dir);
                }
            }
        }
    }
    

    Её нужно вызвать для настройки камеры, а потом зарегистрировать колбек, чтобы они срабатывали каждый кадр:

    
    function runCode(app) {
        var cam = app.camera;
    
        setupVertCons(cam, 1/4 * Math.PI, 3/4 * Math.PI);
    
        app.renderCallbacks.push(function() {
            if (cam.controls.updateVertCons !== undefined) {
                cam.controls.updateVertCons();
            }
        });
    }
    

    Co-founder and lead developer at Soft8Soft.

    #15672
    webgl
    Customer

    Круто, спасибо

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Для ответа в этой теме необходимо авторизоваться.