如何在Kinect上通过手势控制3D模型文件

如何在Kinect上通过手势控制3D模型文件,第1张

控制的话主要就是scale(放大缩小), translation(位移)和 rotation (旋转)。基本上所有物体的运动变化都是由这三个来控制的。

当然涉及到复杂模型的话就需要对每个component(部件)来分别控制,然后在用coordination transform(坐标变旁和搜化)将部件的坐标系转换到世界坐标系。

具体来说通常我们会运用骨骼动画来控制一个3D模型,这个分为两个步骤,第一个步骤就是在建模软件棚饥中将骨骼建立在3D模型中(称为rigging)。第二步,有了这个rigged模运历型,我们就可以在代码层面来控制模型了,其基本原理也是运用到我上面讲的那些。这里有个网站很详细的讲解了如何在代码层面做到骨骼动画。

Kinect方面的问题就是如何调取skeleton乃至joint的详细信息,在官方网站上就有讲到如何获取。

首先,说明两个文件的格式问题:

mesh文件格式

每个mesh由多个submesh组成,每个submesh由faces部分,geometry部分,部分组成。faces部分用顶点索引描述了物体的每一个三角形面。geometry部分由两个组陪山成,第一个描述了每个顶点的坐标和法线,每二个描述了顶点的UV,部分描述了每个顶点所附着的骨头组及权重。

skeleton文件格式

整个skeleton文件分成了三部分bones,animations。哗渣

bones部分描述了每一块骨头的具体情况

,即骨骼的继承关系,描述了骨骼是怎么样组成骨架的。

animations动画集部分。动画集,由多个动画组成。每个动画由一系列乱乱悄的track组成,每个track由一系列的Keyframe组成。一个track描述了单块骨头在每个keyframe所描述的时间点的位移和旋转。

你提的问题要注意两点:

骨骼系统是树状结构,根节点就是髋骨。骨头的位置是相对位置,也就是你所谓的从根骨一直叠加变换到子骨。

顶点是由动画变换之后的骨头决定的,也就是顶点所附着的骨头组及权重决定的。

最后,我在ogre中好像没见到过反向动力学,不过也不难,把骨头的继承关系和相对变换数据重新组织一下(3dmax支持反向动力),从下肢(或四肢)反向递推就可以了。顶点的权重可以不变。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12138880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存