skeleton.xml文件数据分析

 
Skeleton.xml文件中记录了三种信息bones,bonehierarchy,animations。
 
       <bones>
              <bone id="0" name="Hips">
                     <position x="0" y="89" z="-4.03075"/>
                     <rotation angle="0">
                            <axis x="0" y="0" z="1"/>
                     </rotation>
                     <scale x="1" y="1" z="1"/>
              </bone>
              <bone id="1" name="Spine">
                     <position x="0" y="24" z="4.03075"/>
                     <rotation angle="0">
                            <axis x="0" y="0" z="1"/>
                     </rotation>
                     <scale x="1" y="1" z="1"/>
              </bone>
第一部分bones记录骨架信息,骨骼数目,ID,名称。每个bone中信息,postion表示在它的父亲节点空间中,相对于父亲骨骼的位置,如果一个节点没有父亲,则这个位置是在物体空间中的位置。Rotation也一样。
这里给出了两个bone的信息,一个id号为0,名称叫”Hips”,这个节点是整个骨骼的根节点,它的position是在世界坐标系中的位置,也就是在世界坐标系中x="0" y="89" z="-4.03075",以x="0" y="0" z="1"这个矢量逆时针旋转angle="0"这个角度。第二个bone是”Spine”,其position是指相对于父结点”Hips”,也就是在父结点坐标系中位置为x="0" y="24" z="4.03075",在原始的资势中,所有节点的初始局部坐标系与世界坐标系方向相同。
 
<bonehierarchy>
              <boneparent bone="Spine" parent="Hips"/>
第二部分bonehierarchy记录的是父子关系,在分析bone的形态和第三部分计算每个骨骼的位置都会用到。
 
 
       <animations>
              <animation name="BingBu" length="4.16667">
                     <tracks>
                            <track bone="Hips">
                                   <keyframes>
                                          <keyframe time="0">
                                                 <translate x="3.21886" y="-3.96461" z="-97.1298"/>
                                                 <rotate angle="0.230747">
                                                        <axis x="-0.543421" y="-0.82415" z="-0.159595"/>
                                                 </rotate>
                                                 <scale x="1" y="1" z="1"/>
                                          </keyframe>
。。。。。。。。。。。。。
                            <track bone="Spine1">
                                   <keyframes>
                                          <keyframe time="0">
                                                 <translate x="0" y="0" z="0"/>
                                                 <rotate angle="0">
                                                        <axis x="0" y="0" z="1"/>
                                                 </rotate>
                                                 <scale x="1" y="1" z="1"/>
                                          </keyframe>
                                          <keyframe time="0.0416667">
                                                 <translate x="0" y="0" z="0"/>
                                                 <rotate angle="0">
                                                        <axis x="0" y="0" z="1"/>
                                                 </rotate>
                                                 <scale x="1" y="1" z="1"/>
                                          </keyframe>
第三部分记录的骨骼的运动animations虽可能会有多个animation,每一个animation中,骨骼的每个点会产生一个track,意思也好理解,在一段运动中,一个结点位置连线不就是一个轨迹么。那么在这个轨迹track中,又以采样时间间隔,记录了每帧的信息。帧信息包括time,此帧的时间;translate,相对于父结点的位移,因为两骨骼结点的长度,就象人的前臂与肘结点,相对位置是不变的,一般都是0,对于根节点,就象例子给定的”Hips”,它的translate x="3.21886" y="-3.96461" z="-97.1298" 是相对于bone中定义的最初binding位置(binding position是在物体空间)的位移,rotate是相对于axis定义的方向矢量,绕这个矢量旋转angle这样一个角度的。这也就是为什么在animation中,一般root的keyframe中,translate量是非0的,表示在物体坐标中的位置,而非root的骨骼点的translate都是0的原因了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值