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 ответ:
На этот вопрос был дан ответ в другом месте. 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; }