SetTransform заставляет объект Unity LeapMotion вращаться слишком быстро


Это основано на вопросе, который я недавно задал здесь:

Unity3D Leap Motion-поставить руку в статическую позу (SetTransform заставляет руку вращаться с ума)

Однако код, предложенный в единственном приведенном ответе, не работает. Я использую метод "SetTransform", и хотя он позволяет мне переместить руку в нужное положение, вращение сумасшедшее. Рука непрерывно вращается, и, несмотря на то, что я потратил на нее большую часть четырех дней, я не могу найти решение. Короче говоря, все, что я пытаюсь сделать, это установить руку в фиксированную позу (кулак, например), но заставить ее двигаться и вращаться с данными живой руки. Я создал метод (подробно описанный в предыдущем вопросе), который вручную пересчитывал положения суставов, чтобы поставить руку в позу, когда SetTransform вызывал это сумасшедшее вращение. Тем не менее, я все равно закончил с сумасшедшим вращением от необходимости преобразовать руку, чтобы повернуть ее, поэтому я переключился обратно на метод SetTransform для легкость.
posedHand = PoseManager.LoadHandPose(mhd.LeftHand, int.Parse("2"), transform);
Hand h = new Hand();
if(posedHand != null)
{
    h.CopyFrom(posedHand);                               
    h.SetTransform(LiveData.LeftHand.PalmPosition.ToVector3(), LiveData.LeftHand.Rotation.ToQuaternion());
}
Все, что мне действительно нужно, - это метод, в который я могу передать два объекта руки (один из которых является текущей "живой" рукой, а другой-желаемой позой) и получить возвращенный объект руки, который я затем могу визуализировать.

Обновление

В соответствии с просьбой здесь представлены образы того, что я в настоящее время получаю и чего я хочу достичь.

Текущий:

Введите описание изображения здесь

Цель:

Введите описание изображения здесь

Целевое изображение будет отображать фиксированную позу, которая в данном примере кулак находится в текущем положении и вращении живой руки. Это означало, что я мог бы держать руку "открытой", но на экране я видел бы движущийся кулак. Как вы можете видеть из "тока", Сеттрансформа дает мне правильную позу и положение, но вращение пугает.

1 3

1 ответ:

На этот вопрос был дан ответ в другом месте. Unity3D Leap Motion-положите руку в статическую позу (Поза сделана просто не может вращаться)

По существу, я должен был создать функцию, которая принимала в позе руку в качестве параметра, который затем использовал руки.GetHand (Chiralty) для получения положения и вращения из живых данных, которые затем использовались для "SetTransform" поставленной руки в новое положение и вращение
public static Hand TransformHandToLivePosition(Chirality handType, Hand poseHand)
    {
        Hand sourceHand = Hands.Get(handType);
        Hand mimicHand = null;

        if (poseHand == null && sourceHand != null && sourceHand.Fingers.Count > 0)
        {
            //poseHand = PoseManager.LoadHandPose(sourceHand, 2, this.transform, true);
        }

        if (poseHand != null && sourceHand != null)
        {
            // Copy data from the tracked hand into the mimic hand.
            if (mimicHand == null) { mimicHand = new Hand(); }

            mimicHand.CopyFrom(poseHand); //copy the stored pose in the mimic hand
            mimicHand.Arm.CopyFrom(poseHand.Arm); // copy the stored pose's arm into the mimic hand

            // Use the rotation from the live data
            var handRotation = sourceHand.Rotation.ToQuaternion();

            // Transform the copied hand so that it's centered on the current hands position and matches it's rotation.
            mimicHand.SetTransform(sourceHand.PalmPosition.ToVector3(), handRotation);
        }
        return mimicHand;
    }