Приветствую всех,
Приветствую всех. 🙂
Я реализую опыт виртуальной реальности на 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" ),
};
}
Я не могу понять фразу «Установить положение кости в системе координат компонентов». Это не похоже на работу в качестве «замены» для локального пространства (как будто кости вращались вокруг точки опоры аватар). Есть ли другой способ или обходной путь, чтобы установить повороты в локальном пространстве для визуализируемой сетки?
Спасибо заранее. 🙂
Задача ещё не решена.
Других решений пока нет …