Итак, я наконец выяснил, как это работает ..
Видимо, вы работаете с другими spaces
или frames
вместо перемещения origin
(также называемого reference
).
Пространство может жить внутри другого пространства, но давайте пока будем проще с двумя пробелами.
Первый пробел - это ваше «основное» пространство (большую часть времени называется world
в Gamedevelopment)
Второе пространство - это ваше пространство просмотра (или camera
)
(я использую world
и view
в этом ответе)
Я делал все свои вычисления вектора внутри своего мирового пространства. Таким образом, при отрисовке этих векторов на экране они рисуются в позициях относительно эталона мира (который находится в верхнем левом углу экрана).
Чтобы нарисовать мои векторы в другом месте, мне нужно translate
их.
Перевод движущихся векторов вдоль оси.
Это действие «изменения» положения / масштаба / поворота вектора называется Transformation
.
Мы можем видеть преобразования в векторном пространстве просто как переход из одного пространства в другое.
цитата
Этот перевод выполняется с помощью Translation Matrix
(подробнее см. В цитате).
Итак, зная эти пробелы и преобразование я исправил свою программу.
Все мои векторы инициализируются так же, как и раньше, но когда я рисую свои векторы на экране, я транслирую их в соответствии с заранее определенной матрицей перевода. Я называю эту матрицу моей viewMatrix
, потому что она переводит векторы из пространства world
в пространство view
.
Но есть одна вещь, которую нужно исправить.
Вектор pointA
определяется не в world
пространстве, а в view
пространстве.
Это означает, что когда моя мышь находится в положении (20,20), эта позиция отличается от позиции (20,20) в моем world
соке.
Чтобы это исправить, мне нужно translate
мой pointA
вектор с инвертированием из translation matrix
. Это преобразует вектор в вектор внутри пространства world
.
Так вот и все ...
Мне понадобилось 2 дня, чтобы понять это ..
Вот исправленная версия второго примера.
Слева: мой world
пробел
Справа: мой view
пробел
Обратите внимание, что моя мышь теперь правильно выровнена в пространстве моего взгляда, а не в пространстве моего мира
Вот некоторые ресурсы, которые я собрал по пути:
Статья - Матрицы преобразования мира, вида и проекции
Истинная сила матрицы (преобразования в графике) - Компьютерный файл
РБ Уитакер - Основные матрицы
Создание игрового движка: трансформации