Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配Kinect';将骨架数据转换为XNA中的.fbx模型_C#_Xna_Kinect - Fatal编程技术网

C# 匹配Kinect';将骨架数据转换为XNA中的.fbx模型

C# 匹配Kinect';将骨架数据转换为XNA中的.fbx模型,c#,xna,kinect,C#,Xna,Kinect,我的问题是关于我正在做的一个学校项目。 它涉及到在骨架上映射衣服(如牛仔裤)的三维模型 这是由我的Kinect相机生成的 可以在此处找到一个示例: 我搜索了这个主题,发现了一些相关的线索,如: -这个问题演示了一种使用brekel进行运动捕捉的方法。但是,我必须在XNA中演示它 我相信答案在于3D模型的骨架数据(正确导出为.FBX文件)。是否有方法将该骨架与Kinect摄影机生成的骨架对齐或匹配 提前谢谢 编辑:我正在取得一些进展。我一直在玩一些不同的模型,试图将一些骨骼向上移动(非常简单地使用

我的问题是关于我正在做的一个学校项目。 它涉及到在骨架上映射衣服(如牛仔裤)的三维模型 这是由我的Kinect相机生成的

可以在此处找到一个示例:

我搜索了这个主题,发现了一些相关的线索,如: -这个问题演示了一种使用brekel进行运动捕捉的方法。但是,我必须在XNA中演示它

我相信答案在于3D模型的骨架数据(正确导出为.FBX文件)。是否有方法将该骨架与Kinect摄影机生成的骨架对齐或匹配

提前谢谢


编辑:我正在取得一些进展。我一直在玩一些不同的模型,试图将一些骨骼向上移动(非常简单地使用CreateTransformation和一个根据游戏时间计算的浮动),如果我选择根骨骼,它可以工作,但对一些骨骼不起作用(例如手或手臂)。如果我跟踪该骨骼的所有变换属性,包括X、Y和Z属性,那么我可以看到有东西在移动。。然而,选定的骨骼仍保留在原来的位置。有人有什么想法吗?

Kinect SDK只提供身体部位的点,如头部位置或右手位置。另外,您还可以从Kinect传感器读取深度流


但目前Kinect无法生成人体的3D模型。你必须自己去做

如果您感兴趣,那么您将找到一个演示。它有使用Kinect和XNA进行实时运动捕捉的源代码。

我已经断断续续地做了一段时间了。我现在使用的一个简单解决方案是使用nui骨架轨迹的点来匹配.fbx模型中各种关节的旋转。fbx模型很可能有更多的关节,而不是跟踪的关节,对于这些关节,您只需迭代旋转即可

有趣的部分:

当模型需要在模型空间中旋转时,Kinect将跟踪骨架空间中的骨架关节位置-1到1。它们都提供了与层次中父骨骼相关的子位置或旋转。此外,.fbx模型需要绕任意轴旋转

您需要的是将绑定姿势中的.fbx模型更改为kinect数据表示的姿势。要获得此结果,您可以执行一些向量数学来查找父关节围绕任意轴的旋转,并相应地旋转它,然后沿骨架链向下移动

假设你有一个肩膀,我们称之为点a,肘部,我们可以称之为fbx模型绑定姿势上的点b。我们将在骨架上有一个点a'和点b'。 因此,对于绑定模型,我们将有一个从肩部到肘部的向量V

V=b-a

骨架模型也将有一个向量V'

V'=b'-a'

所以肩部的旋转轴是

Vhat=V叉积V'

Vhat周围肩部的旋转角度

θ=((V点积V')/幅值(V))*幅值(V')

到,您将希望围绕Vhat将fbx模型上的肩部关节旋转θ

该模型可能看起来有点失败,因此您可能必须使用一些约束或使用四元数或其他帮助它看起来不像死鱼的东西


另外,我不确定XNA是否有一个内置的绕任意轴旋转的功能。如果有人能仔细检查我的数学,我会很感激,我有点生疏。

我最终选择了数字符文选项(使用Kinect demo),除了一些我无法解决的问题外,这几乎是完美的


但因为我必须赶去上学,我们决定彻底改变项目,我们的新解决方案没有涉及Kinect。数字符文的例子确实帮了大忙。

这就是我的想法:使用Kinect SDK生成的身体部位的位置,并将其提供给3D模型。这样,当我挥动右手时,模型也应该挥动它的手(只有手,手指不受支持)。这正是我所需要的,谢谢!我正在寻找其他替代方案,但此方案位于我的收藏夹中;)思维敏捷。因为关节的位置是相对于父关节的。肘部的位置是向量。您可能希望对其进行规格化,以帮助调整骨架和模型之间的旋转比例。