到了现在这一步为止,你应该能够读取COLLADA文件中的几何数据、骨骼数据和蒙皮数据。并且你能够以原始三角形绘制模型甚至能够绘制出它的骨骼。尽管我还没有讨论你怎样可以为每个关节叠加它们的世界矩阵然后将其以世界坐标的形式来绘制从而方便调试使用。但我想我可以给你一个提示,我们必须将父关节的世界矩阵乘以当前关节的矩阵然后将它作为当然关节的世界矩阵保存起来。我们必须从根关节开始做这件事。从而我们不会从父节点中获取污染了的矩阵,而且根关节的世界矩阵同时也是根关节本身的变换矩阵,因为根关节没有任何的父关节(注:也就是说把开始绘制当然模型时的世界矩阵当作根关节的矩阵,而不要重新的维护一个自己的,整个骨骼每次都从根关节的矩阵也就是当前模型的世界矩阵开始重新计算一遍,这样也不会造成矩阵重复叠加的错误。尽管这里做了一个很复杂的解释,但我想实际上他不说大家也都是这么做的不是吗)。如果你同时还在读COLLADA的1.5版规范说明,你可以找到蒙皮的公式,所以你也可以自己将模型摆成文件中定义好的各个形状(注:动画数据其实就是一个一个的POSE和摆出这个POSE的时间,只不过按时间的流逝不停的摆出POSE并且还计算出两个时间点之间的中间POSE从而让动画看起来更平滑而已,这是后文)。到现在我们还没讨论到怎么让这个模型动起来,我们会在下一节讨论这点。 点击打开本节代码
读取COLLADA文件中的动画数据
迄今为止我们已经可以读取静态模型的所有数据了,还剩下的唯一的事情就是理解和读取动画部分的数据。COLLADA的动画并不是非常成熟,可以说它还处在幼年时期,过一段时间后说不定它的动画会变得更成熟更好。但就从实现我们的目的这点来看,我们还有许多值得担心的地方。
在这个library里保存了所有的动画数据。对于每个关节的动画,你会看到一个
在
下面的例子是不不会出现在我们的示例COLLADA文件中的,因为我们假定文件记录用的是背向矩阵(backing matrices)。但这样的例子比较容易理解。
[html] view plaincopyprint?
1. Example: 2. 3. 4.
5.
7.
9. < technique_common> 10.
11.
13. 14.
15. 16.
17. 18.
19. 20.
21.
23.
25.
27.
29. 30.
31. 32.
33. 34.
35.
36.
37.
39.
41.
43. < accessor source=\ count=\ stride=\> 44.
45. 46.
47. 48.
49. 50.
51. 52. 53. 54.
55.
57. 58.
59. 60.
61. 62.
63. 64. 65. 66.
67.
现在我们从底部的
这表示在场景中有一个叫做\的实体(对我们来说这实体就是关节),它的动画其中的“X方向变换”(trans.X)是由叫做\的采样器控制的。
所以我们需要知道\采样器是怎样对实体坐标的进行X变换的,我们需要读取
为了获得动画数据,你需要读取3种输入信息(也就是)结点。
第一种
当我们开始读取
属性”semantic” = \
当我们读取这一堆
而

