Тебе нужна математика. Я постараюсь быть мягким, но если вы не знаете, как делать умножение матриц, вам нужно посмотреть это прямо сейчас!
Во-первых, вам нужно превратить ваш 3D-вектор в 4-вектор, добавив к нему дополнительный 1. Компьютерная графика обычно называет это координатой "w" (для обозначения координат x, y и z).
3D вектор: (X, Y, Z) -> 4D вектор: (x = X, y = Y, z = Z, w = 1)
Затем вы можете умножить 4-вектор на матрицу 4x4. Что это делает, зависит от матрицы - но вы можете сделать матрицу, которая переводит вектор:
[x,y,z,1] * [1 0 0 0] = [x+a,y+b,z+c,1]
[0 1 0 0]
[0 0 1 0]
[a b c 1]
Неудивительно, что этот вид матрицы называется матрицей перевода.
Преимущество таких действий состоит в том, что вы также можете создать матрицу вращения или масштабную матрицу, а затем умножить столько их, сколько хотите, вместе на одну матрицу :
v * M1 * M2 * M3 = v * (M1*M2*M3)
Умножение вектора на полученную матрицу эквивалентно умножению на все матрицы компонентов в последовательности, что, как вы можете себе представить, может сэкономить вам много времени и хлопот.
Код для умножения 4-вектора на матрицу 4x4 может выглядеть примерно так:
for(int i=0; i<4; ++i) {
double accumulator= 0.0;
for(int j=0; j<4; ++j) {
accumulator+= rowVectorIn[j]*matrix[j][i]; // matrix is stored by rows
}
rowVectorOut[i]= accumulator;
}