Установите повороты костей для сетки Poseable в локальном пространстве

Приветствую всех,

Приветствую всех. 🙂

Я реализую опыт виртуальной реальности на UE4, который обнаруживает движение пользователя опытной виртуальной реальности, а затем обновляет соответствующую позу аватара или представление пользователя в виртуальном мире.

Для этого я реализовал это поведение в C ++ на основе сказанного по этой теме:

https://forums.unrealengine.com/showthread.php?25264-Pose-a-skeletal-mesh-in-runtime

То есть у меня есть USkeletalMeshComponent (чья сетка Skeletal — та, которая видна на экране) и UPoseableMeshComponent (устанавливаемый как «главный компонент позы» для USkeletalMeshComponent), который получает данные поворота в виде кватернионов от каждого датчика отслеживания.

С одной стороны, сетка для UPoseableMeshComponent будет установлена ​​на сетку USkeletalMeshComponet. С другой стороны, кости представляемой сетки обновляются с помощью соответствующих данных вращения, поступающих от датчиков отслеживания для каждой кости, что автоматически обновляет скелетную сетку в соответствии с тем, что UPoseableMeshComponent был установлен как «главный компонент позы» для USkeletalMeshComponent.

Это прекрасно работает при работе со всеми частями тела, которые не являются фалангами пальцев, потому что вращения устанавливаются на этих частях тела в мировом пространстве следующим образом:

m_pPoseableMeshComp->SetBoneRotationByName(strBoneName, qBoneRotation.Rotator(), EBoneSpaces::WorldSpace);

Тем не менее, по техническим причинам, необходимо установить вращения костей для каждой фаланги пальцев в ЛОКАЛЬНОМ пространстве, но представимые сетки, кажется, работают только в мировом пространстве и пространстве компонентов; при проверке файла SkinnedMeshComponent.h в EBoneSpaces :: Type есть значение перечисления LocalSpace, но оно прокомментировано.

/** Values for specifying bone space. */

UENUM()
namespace EBoneSpaces
{
enum Type
{
/** Set absolute position of bone in world space. */
WorldSpace        UMETA(DisplayName = "World Space"),
/** Set position of bone in components reference frame. */
ComponentSpace    UMETA(DisplayName = "Component Space"),
/** Set position of bone relative to parent bone. */
//LocalSpace        UMETA( DisplayName = "Parent Bone Space" ),
};
}

Я не могу понять фразу «Установить положение кости в системе координат компонентов». Это не похоже на работу в качестве «замены» для локального пространства (как будто кости вращались вокруг точки опоры аватар). Есть ли другой способ или обходной путь, чтобы установить повороты в локальном пространстве для визуализируемой сетки?

Спасибо заранее. 🙂

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]