Как уже указывалось в комментариях, самый простой подход - это перевести объект так, чтобы точка поворота находилась в начале координат, затем повернуть объект вокруг начала координат и затем перевести его обратно.Каждый из этих шагов может быть выполнен с использованием матрицы;умножение этих матриц должно привести к матрице, которая делает все это сразу.
В данном примере эти матрицы будут:
1.translation by (-3,-4,0):
[ 1, 0, 0,-3,
0, 1, 0,-4,
0, 0, 1, 0,
0, 0, 0, 1 ]
2. rotation (in this example by 90 degrees)
[ 0, 1, 0, 0,
-1, 0, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1 ]
3. translation by (3,4,0)
[ 1, 0, 0, 3,
0, 1, 0, 4,
0, 0, 1, 0,
0, 0, 0, 1 ]
Это приведет к следующей матрице какокончательное преобразование:
[ 0, 1, 0,-1,
-1, 0, 0, 7,
0, 0, 1, 0,
0, 0, 0, 1 ]
Вам может потребоваться изменить порядок умножения в зависимости от деталей реализации, но в целом это должно работать.