1、kf文件解析完成,导入未开始测试。
2、xsm文件解析完成,导入完成度50%。
3、hkx文件可以利用HavokContentTools转成文本形式,导入未开始测试。
==============================
本次能有此进度的原因是测试发现,先打开blender249文件,保存blender290文件,新建空白blender291文件,追加前面保存的blender290,追加选择collection点击追加。这样blender291的软件界面是正常的,动画播放也正常。
然后把location和旋转从blender里导出来xml文件。这个文件就是标准答案。
以前一直在blender导入的文件,不得而入,这次因为有了标准答案,实现把位置正确的导入了进去。
但问题也来了,旋转导入失败。
导入旋转的测试过程,把edit_bone,pose_bone,bone的head, head_local,matrix, matrix_world,matrix_local, matrix_basis,matrix_channel,测试一遍。
最终搞清楚了,在新建edit_bone,位于Armature space,xsm文件存储的数据位于bone space,bone space 转Armature space简单,问题出在了Armature space(local space) 转 pose space(object space),这个矩阵blender290是隐藏的,没有对外暴露。
后期通过附加属性的形式,跟踪建立edit_bone,之前和之后的形式是不一样的,简单的建,我新建edit_bone的head是1个数据,blender建立edit_bone后,head_local是另外1个数据。按道理这2个数据应该是一样的,但现在是不一样和等效。
所以到现在为止,告一个段落,目前已经把blender部分和xsm文件部分排除,问题锁定在建立edit_bone过程中,数据是被这样处理的。个人理解是Armature space(local space) 转 pose space(object space)矩阵。
具体如何,准备去看blender源代码,学习与理解矩阵与源代码的时间没法把握。
2、xsm文件解析完成,导入完成度50%。
3、hkx文件可以利用HavokContentTools转成文本形式,导入未开始测试。
==============================
本次能有此进度的原因是测试发现,先打开blender249文件,保存blender290文件,新建空白blender291文件,追加前面保存的blender290,追加选择collection点击追加。这样blender291的软件界面是正常的,动画播放也正常。
然后把location和旋转从blender里导出来xml文件。这个文件就是标准答案。
以前一直在blender导入的文件,不得而入,这次因为有了标准答案,实现把位置正确的导入了进去。
但问题也来了,旋转导入失败。
导入旋转的测试过程,把edit_bone,pose_bone,bone的head, head_local,matrix, matrix_world,matrix_local, matrix_basis,matrix_channel,测试一遍。
最终搞清楚了,在新建edit_bone,位于Armature space,xsm文件存储的数据位于bone space,bone space 转Armature space简单,问题出在了Armature space(local space) 转 pose space(object space),这个矩阵blender290是隐藏的,没有对外暴露。
后期通过附加属性的形式,跟踪建立edit_bone,之前和之后的形式是不一样的,简单的建,我新建edit_bone的head是1个数据,blender建立edit_bone后,head_local是另外1个数据。按道理这2个数据应该是一样的,但现在是不一样和等效。
所以到现在为止,告一个段落,目前已经把blender部分和xsm文件部分排除,问题锁定在建立edit_bone过程中,数据是被这样处理的。个人理解是Armature space(local space) 转 pose space(object space)矩阵。
具体如何,准备去看blender源代码,学习与理解矩阵与源代码的时间没法把握。