(个人)VR太极拳学习系统-创新实训第六周(1)

DTW算法封装

动态时间规整算法是我们为了检测两段骨骼动画是否相似而使用的算法,为了实现给用户的动作评分的功能,我将它封装到了一个actor中。
将普通c++代码改写成Unreal C++还是比较容易的,我这里基本上只需要添加一下UFUNCTION宏然后把数组改成UE4提供的容器即可,改写之后的结果如下:
(个人)VR太极拳学习系统-创新实训第六周(1)
编译之后就可以在蓝图中使用JudgeActor提供的功能了。

记录每一帧的骨骼位置

由于dtw算法的输入是一段时间序列内每个骨骼的位置,所以我创建了一个ActorComponent用来记录该信息。但是这个时候我发现了一个令人绝望的事实——UE4蓝图无法使用容器存储容器(。﹏。)。然而这一点对我来说很重要,因为我要实现的功能其实有大量的重复代码是可以用多层循环解决的,这就让我很难受了。本着先做一个demo之后可以再改成c++的想法,我选择了一条错误的道路,还是实现了这个蓝图类,最后的结果就是蓝图中有数处类似下图所示的代码:
(个人)VR太极拳学习系统-创新实训第六周(1)
实现这个蓝图类的过程让我感受到了图形化编程还是不够靠谱啊,这一套连下来我的手都不行了,果然还是像emacs和vim一样尽量多用键盘少碰鼠标比较高效。
之后在关卡中放置两个带动画的Character,然后给他们添加上这个组件,再在关卡蓝图里面实现开始录制、结束录制、输出DTW计算结果的功能,就可以测试了。
(个人)VR太极拳学习系统-创新实训第六周(1)
可以看到DTW算法可以正常运作。