2

向大家问好,

向大家问好。:)

我在 UE4 上实现了一个 VR 体验,它检测 VR 体验用户的移动,然后更新虚拟世界中虚拟形象或用户表示的相应姿势。

为此,我根据关于此主题的内容使用 C++ 实现了此行为:

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

也就是说,我有一个 USkeletalMeshComponent(其骨架网格是屏幕上看到的那个)和一个 UPoseableMeshComponent(被设置为 USkeletalMeshComponent 的“主姿势组件”),它从每个跟踪传感器接收旋转数据作为四元数。

一方面,UPoseableMeshComponent 的网格将设置为 USkeletalMeshComponet 的网格。另一方面,可摆姿势网格的骨骼使用来自每个骨骼的跟踪传感器的相应旋转数据进行更新,由于 UPoseableMeshComponent 被设置为USkeletalMeshComponent。

这在处理不是手指方阵的所有身体部位时非常有效,因为在世界空间中的这些身体部位上设置了旋转,以这种方式:

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

但是,出于技术原因,必须在 LOCAL 空间中为每个手指方阵设置骨骼旋转,但可摆设网格似乎仅适用于世界空间和组件空间;检查 '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" ),
     };
 }

我无法理解“在组件参考框架中设置骨骼位置”这句话。它似乎不能作为局部空间的“替代品”(好像骨骼围绕化身的枢轴点旋转)。是否有任何其他方法或解决方法可以在局部空间中为可摆设的网格设置旋转?

提前感谢。:)

4

0 回答 0