如果一个模型文件如下(省略了顶点定义和部分skinweight的部分数据)
SkinWeights {
"joint1";
24;
0,
15,
21,
1,
14,
16,
2,
8,
22,
3,
9,
19,
4,
10,
23,
5,
11,
18,
6,
12,
20,
7,
13,
17;
0.665297,
0.665297,
0.665297,
0.665297,
0.665297,
0.665297,
0.168087,
0.168087,
0.168087,
0.168087,
0.168087,
0.168087,
0.193470,
0.193470,
0.193470,
0.193470,
0.193470,
0.193470,
0.618487,
0.618487,
0.618487,
0.618487,
0.618487,
0.618487;
0.000000,-1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;
}
SkinWeights {
"joint2";
...
}
SkinWeights {
"joint3";
... }
SkinWeights {
"pCube1";
...
}
}
}
Frame joint1 {
FrameTransformMatrix {
0.000000,1.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;
}
F
rame joint2 {
FrameTransformMatrix {
1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,2.000000,0.000000,0.000000,1.000000;;
}
Frame joint3 {
FrameTransformMatrix {
-0.000000,-1.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,2.000000,0.000000,0.000000,1.000000;;
}
}
}
}
}
AnimationSet {
Animation {
{ joint2 }
AnimationKey {
0;
3;
0;4;-1.000000,0.000000,0.000000,0.000000;;,
4500;4;-1.000000,0.000000,0.000000,0.000000;;,
9000;4;-1.000000,0.000000,0.000000,0.000000;;;
}
AnimationKey {
1;
3;
0;3;1.000000,1.000000,1.000000;;,
4500;3;1.000000,1.000000,1.000000;;,
9000;3;1.000000,1.000000,1.000000;;;
}
AnimationKey {
2;
3;
0;3;2.000000,0.000000,0.000000;;,
4500;3;3.000000,0.000000,0.000000;;,
9000;3;2.000000,0.000000,0.000000;;;
}
}
Animation {
{ joint1 }
AnimationKey {
0;
3;
0;4;-0.000000,0.707107,0.707107,0.000000;;,
4500;4;-0.707107,0.000000,0.000000,0.707107;;,
9000;4;-0.707107,0.000000,0.000000,0.707107;;;
}
AnimationKey {
1;
3;
0;3;1.000000,1.000000,1.000000;;,
4500;3;1.000000,1.000000,1.000000;;,
9000;3;1.000000,1.000000,1.000000;;;
}
AnimationKey {
2;
3;
0;3;0.000000,0.000000,0.000000;;,
4500;3;0.000000,2.000000,0.000000;;,
9000;3;0.000000,0.000000,0.000000;;;
}
}
}
说明: 1个cube盒子绑定有3个骨骼, joint1->joint2->joint3 的一种直线关系, 其中只有joint1, joint2分别有3个关键帧
问题: 如何得到骨骼绑定前的坐标值? 怎么计算顶点的动作帧(自己写算法,不用微软的函数)? 请详细说明一下,谢谢 |