Далее захотел перенести машину на новые координаты, используя координаты смещения и сбросить её ориентацию в пространстве, чтобы она была "0 0 0"
По идее такие вычисления и происходят при создании вещи(объекта).
Он создаётся в координатах "0 0 0", затем его перемещают на нужные координаты и при необходимости меняют ориентацию в пространстве(крутят, наклоняют, смещают относительно одной оси)
Перемещение:
Как я понял, оно достаточно просто реализуется.
К координатам объекта, которые хранятся в одномерном массиве с тремя элементами(vector) прибавляют координаты смещения
То есть нулевой элемент одного массива складывают с нулевым элементом другого и так по порядку.
Я сделал таким образом и дополнительно через матрицы, так как в одной из статей в интернете прочитал, что часто используют для этого матрицы, чтобы сэкономить на вычислениях, когда объект надо переместить и изменить ориентацию, а там как раз используются вычисления с помощью матрицы.
Ну и плюс, чтобы попрактиковаться в них и понять, как происходят такие вычисления.
Изначальную позицию машины сохранил в переменной vCarPos
vector vCarPos = carObject.GetPosition();
// <4769.07, 475.492, 15035.1>
Смещение записал в отдельную переменную vOffsetCarPos
vector vOffsetCarPos = "1.0 0.5 1.0";
Далее создал единичную матрицу, так как именно с ней происходят необходимые вычисления для перемещения объекта
В игре для этого есть отдельная функция, поэтому ей и воспользовался:
На вход она принимает двумерный массив 3 х 4, поэтому нужно было его объявить.
Получился такой код:
vector vMatrixIdentity[4];
Math3D.MatrixIdentity4( vMatrixIdentity );
Print( vMatrixIdentity );
/*
<1, 0, 0>,
<0, 1, 0>,
<0, 0, 1>,
<0, 0, 0>
*/
Сразу вывел результат на экран, чтобы понимать, с чем имею дело
Тут я немного удивился, так как я ожидал квадратную матрицу 4 х 4 и надо будет этот момент отдельно продумать, так как возможно, что вычисления не до конца верные.
При таком положении дел, я просто добавил данные по смещению в последнюю строчку:
vMatrixIdentity[3][0] = vOffsetCarPos[0];
vMatrixIdentity[3][1] = vOffsetCarPos[1];
vMatrixIdentity[3][2] = vOffsetCarPos[2];
и получилось:
Print( vMatrixIdentity );
/*
<1, 0, 0>,
<0, 1, 0>,
<0, 0, 1>,
<1, 0.5, 1>
*/
И перемножил координаты автомобиля(вектор) на матрицу перемещения
vector vCarPosTransform = vCarPos.Multiply4(vMatrixIdentity);
Print(vCarPosTransform);
Получился ожидаемый результат:
<4770.07, 475.992, 15036.1>