3D (iOS SceneKit), переключение трансформации камеры и другого объекта - PullRequest
0 голосов
/ 16 мая 2018

У меня есть сцена с камерой и еще одним объектом: трехмерная модель персонажа.

Использование информации об ориентации из алгоритма оценки позы (vec3 для перевода и vec4 кватерниона для вращения) преобразование моей камеры переводится и поворачивается, чтобы сфокусироваться на этом символе, который находится в (0,0,0 ) и с 0 вращением . Это работает правильно и точно, но я хочу «повернуть» эти значения так, чтобы я влиял на символьный объект с помощью ввода, поместив камеру вместо 0,0,0 с поворотом 0.

Мне кажется, что мне нужно повернуть предоставленную матрицу преобразования камеры вокруг источника, чтобы создать myObjectTransform , затем обнулить значения камеры и просто применить myObjectTransform в качестве преобразования объекта символа , Однако, если я сделаю это, мои входные значения перевода и поворота не будут влиять на сцену так, как мне бы хотелось - вращение, кажется, идет в неправильных направлениях, и даже положение перевода кажется неправильным.

Звучит так, будто это должно быть легко, но я явно что-то упускаю. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 16 мая 2018

Я решил это с помощью SCNMatrix4Invert - обратная матрица камеры - это именно то, что я искал.Я забыл, однако, что я применял дополнительное вращение X на 180 градусов при начальном заданном переводе и повороте.

Так что мой процесс, хотя и немного неопрятный, выглядит так:

  1. Создайте SCNMatrix4 и установите его положение и поворот из входного значения оценки позы
  2. Поворот матрицы по оси X на 180 градусов (мой пользовательский шаг)
  3. Инвертирование матрицы
  4. Я также произвольно масштабирую свой объект персонажа, поэтому я записываю его масштабный вектор.
  5. Применим матрицу как свойство 'transform' SCNNode моего объекта персонажа
  6. Установитемасштаб SCNNode, полученный в # 4.Я мог бы сделать это многими способами, например, применить ту же шкалу к SCNMatrix4, что, вероятно, будет лучше.
...