Перейти к содержимому


Фотография

Как получить yaw,pitch и roll


Лучший Ответ nIkRon , 14 December 2018 - 16:59

cursorObject call {
    private _direction = vectorDir _this;
    private _up = vectorUp _this;
    private _aside = _direction vectorCrossProduct _up;

    private ["_xRot", "_yRot", "_zRot"];

    if (abs (_up select 0) < 0.999999) then {
        _yRot = -asin (_up select 0);

        private _signCosY = if (cos _yRot < 0) then { -1 } else { 1 };

        _xRot = (_up select 1 * _signCosY) atan2 (_up select 2 * _signCosY);
        _zRot = (_direction select 0 * _signCosY) atan2 (_aside select 0 * _signCosY);
    } else {
        _zRot = 0;

        if (_up select 0 < 0) then {
            _yRot = 90;
            _xRot = (_aside select 1) atan2 (_aside select 2);
        } else {
            _yRot = -90;
            _xRot = (-(_aside select 1)) atan2 (-(_aside select 2));
        };
    };

    [_xRot, _yRot, _zRot]
};
Перейти к сообщению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 13 December 2018 - 23:03

Здравствуйте, в параметрах объекта который поставлен в редакторе есть колонки под позицией, которые называются "Вращение", они же yaw,pitch и roll. Вопрос, как получить эти yaw,pitch и roll из объектов которые стоят в карте ?
Как получить их из объектов которые в редакторе я знаю(

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

), а вот из карты никак понять не могу.


  • 0

#2 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 13 December 2018 - 23:54

Нашел вот это: 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

, но оно не работает как нужно, если менять что то одно а остальное оставлять на 0, то все нормально, но если скомбинировать, то числа уже неверные.


Сообщение отредактировал nIkRon: 14 December 2018 - 00:22

  • 0

#3 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 14 December 2018 - 16:59   Лучший Ответ

cursorObject call {
    private _direction = vectorDir _this;
    private _up = vectorUp _this;
    private _aside = _direction vectorCrossProduct _up;

    private ["_xRot", "_yRot", "_zRot"];

    if (abs (_up select 0) < 0.999999) then {
        _yRot = -asin (_up select 0);

        private _signCosY = if (cos _yRot < 0) then { -1 } else { 1 };

        _xRot = (_up select 1 * _signCosY) atan2 (_up select 2 * _signCosY);
        _zRot = (_direction select 0 * _signCosY) atan2 (_aside select 0 * _signCosY);
    } else {
        _zRot = 0;

        if (_up select 0 < 0) then {
            _yRot = 90;
            _xRot = (_aside select 1) atan2 (_aside select 2);
        } else {
            _yRot = -90;
            _xRot = (-(_aside select 1)) atan2 (-(_aside select 2));
        };
    };

    [_xRot, _yRot, _zRot]
};

  • 0




Яндекс.Метрика