Unity3D манипулирует ориентацией объекта относительно исходной ориентации - PullRequest
0 голосов
/ 28 мая 2018

Я столкнулся с другой проблемой при взаимодействии рук и объектов с использованием устройства Leap Motion.В частности, я использую LM для управления ориентацией виртуальных объектов.

Я хочу использовать разницу между текущей и последней ориентацией руки для манипулирования объектом:

Quaternion relativeOrientationHands = Quaternion.Inverse(currentHandOrientation) * updatedHand;
transform.rotation = transform.rotation * relativeOrientationHands;

Это работает нормально, однако проблема в том, что, скажем, я поворачиваюобъект на 180 градусов вокруг оси x (после этого у указывает вниз).Если после этого я отпущу объект и снова пойму его, с тех пор изменения ориентации будут применены к новой ориентации объекта, которая очень запутана в использовании.(Оригинал: поверните руку влево - объект поворачивается против часовой стрелки; После: поверните руку влево - объект поворачивается по часовой стрелке)

enter image description hereenter image description hereenter image description here

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

РЕДАКТИРОВАТЬ:

3 цифры иллюстрируют мою проблему.На первом рисунке показан объект в его исходной ориентации (х-вправо, у-вверх).Я поворачиваю куб на 180 градусов, поворачивая руку на 180 градусов по часовой стрелке вокруг z (синяя ось), после того как я отпускаю его, x указывает влево, а y указывает вниз (рисунок 2).Если я возьму объект (рисунок 3) в его текущей ориентации, и скажем, я хотел бы выполнить поворот на 90 градусов по часовой стрелке вокруг оси Y.На рисунке 1 я мог бы сделать это, повернув руку на 90 градусов по часовой стрелке.Однако я изменил ориентацию куба своими предыдущими манипуляциями.Поэтому мне нужно было бы выполнить вращение моей руки на 90 градусов против часовой стрелки, чтобы переместить объект по часовой стрелке, потому что ось Y перевернута (рисунок 2-3).Я всегда хочу, чтобы поворот вашей руки на 90 градусов по часовой стрелке приводил к повороту объекта на 90 градусов по часовой стрелке независимо от его текущей ориентации.

Большое спасибо

Лучший R.Devel

...