Неверные результаты простого преобразования координат в UE4 - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть простой пример:

FVector TransformTest()
{
    FVector translation;
    {
        translation.X = 0.0f;
        translation.Y = 20.0f;
        translation.Z = 0.0f;
    }

    FRotator rotation;
    {
        rotation.Roll   = 0.0f;
        rotation.Pitch  = 0.0f;
        rotation.Yaw    = 45.0f;
    }

    FVector scale;
    {
        scale.X = 2.0f;
        scale.Y = 1.0f;
        scale.Z = 1.0f;
    }

    FTransform test_transform = FTransform(rotation, translation, scale);

    return (test_transform.Inverse() * test_transform).GetTranslation();
}

И эта функция вернет вектор:

[X = -10,0, Y = -10,0, Z = 0,0] .

Ожидается:

[X = 0,0, Y = 0,0, Z = 0,0] .

Я выполняю преобразование, например, LocalToWorld затем WorldToLocal , те, кого я начинаю из некоторого пространства и должен вернуться обратно в это пространство (с небольшими неточностями), но я заканчиваю свой путь в странном пространстве далеко от источника.

Я отправил, как мне кажется, ошибку в Epic и получил ответ:

Здравствуйте,

Спасибо за отправку сообщения об ошибке,однако в настоящее время мы считаем, что описываемая вами проблема на самом деле не является ошибкой в ​​Unreal Engine, и поэтому мы не можем предпринять дальнейших действий по этому вопросу.

Вот ветка форума UE4.

Правильно ли это поведение?

Этоошибка или нет?

1 Ответ

0 голосов
/ 23 декабря 2018

На самом деле, похоже, что это невозможно решить (без серьезных изменений).

FTransform имеет разложенное преобразование (перемещение, вращение и масштабирование).Его применение идет в масштабе порядка, поворота и перевода.

Но инвертированное преобразование должно применяться в обратном порядке - обратное перемещение, вращение и масштабирование.

Тем не менее, это тот же класс, и он не имеет никакой информации о порядке применения.

Работает нормально с равномерной шкалой, но не правильно для неоднородной.Если вы используете неоднородный, вам придется использовать FMatrix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...