Collada 快速入门 - 图文

2026/1/27 12:04:13

到了现在这一步为止,你应该能够读取COLLADA文件中的几何数据、骨骼数据和蒙皮数据。并且你能够以原始三角形绘制模型甚至能够绘制出它的骨骼。尽管我还没有讨论你怎样可以为每个关节叠加它们的世界矩阵然后将其以世界坐标的形式来绘制从而方便调试使用。但我想我可以给你一个提示,我们必须将父关节的世界矩阵乘以当前关节的矩阵然后将它作为当然关节的世界矩阵保存起来。我们必须从根关节开始做这件事。从而我们不会从父节点中获取污染了的矩阵,而且根关节的世界矩阵同时也是根关节本身的变换矩阵,因为根关节没有任何的父关节(注:也就是说把开始绘制当然模型时的世界矩阵当作根关节的矩阵,而不要重新的维护一个自己的,整个骨骼每次都从根关节的矩阵也就是当前模型的世界矩阵开始重新计算一遍,这样也不会造成矩阵重复叠加的错误。尽管这里做了一个很复杂的解释,但我想实际上他不说大家也都是这么做的不是吗)。如果你同时还在读COLLADA的1.5版规范说明,你可以找到蒙皮的公式,所以你也可以自己将模型摆成文件中定义好的各个形状(注:动画数据其实就是一个一个的POSE和摆出这个POSE的时间,只不过按时间的流逝不停的摆出POSE并且还计算出两个时间点之间的中间POSE从而让动画看起来更平滑而已,这是后文)。到现在我们还没讨论到怎么让这个模型动起来,我们会在下一节讨论这点。 点击打开本节代码

读取COLLADA文件中的动画数据

迄今为止我们已经可以读取静态模型的所有数据了,还剩下的唯一的事情就是理解和读取动画部分的数据。COLLADA的动画并不是非常成熟,可以说它还处在幼年时期,过一段时间后说不定它的动画会变得更成熟更好。但就从实现我们的目的这点来看,我们还有许多值得担心的地方。

在这个library里保存了所有的动画数据。对于每个关节的动画,你会看到一个结点,它包含了相关关节的详细动画数据。请记住,一个通道(注:也就是它下面所关联的一系列数据)会改变它所作用的目标原来的形状,它的作用目标一般而言是关节(注:而不是所谓的骨骼,骨骼是假想的东西)。 在下有三种类型的子结点,第一种通常是一系列的记录数据的,第二种是,第三种是。你需要结点来获得动画数据关联的目标。

结点里你会获得这个动画数据作用的对象的ID。(注:这极难翻译的原文是From node you pick the target which gives you the ID of the Object on which the Animation data will be applied. And you also get the Sampler ID from where you will pick the sources from which you will pick the animation Data.)

下面的例子是不不会出现在我们的示例COLLADA文件中的,因为我们假定文件记录用的是背向矩阵(backing matrices)。但这样的例子比较容易理解。

[html] view plaincopyprint?

1. Example: 2. 3. 4.

5. 6.

7. 0 1.16667 8.

9. < technique_common> 10.

11. 12.

13. 14.

15. 16.

17. 18.

19. 20.

21. 22.

23. 2.2 3.5 24.

25. 26.

27. 28.

29. 30.

31. 32.

33. 34.

35.

36.

37. 38.

39. LINEAR LINEAR 40.

41. 42.

43. < accessor source=\ count=\ stride=\> 44.

45. 46.

47. 48.

49. 50.

51. 52. 53. 54.

55. 56.

57. 58.

59. 60.

61. 62.

63. 64. 65. 66.

67. 68. 69.

现在我们从底部的结点开始分析。

这表示在场景中有一个叫做\的实体(对我们来说这实体就是关节),它的动画其中的“X方向变换”(trans.X)是由叫做\的采样器控制的。

所以我们需要知道\采样器是怎样对实体坐标的进行X变换的,我们需要读取结点,它会告诉我们这一点。

为了获得动画数据,你需要读取3种输入信息(也就是)结点。

第一种结点是:INPUT 第二种结点是:OUTPUT 第三种结点是:INTERPOLATION

当我们开始读取下的结点。

属性”semantic” = \ 属性”semantic” = \ 属性”semantic” = \

当我们读取这一堆时,我们看到下属性”semantic”为\的子结点所引用的结点,其子结点下的子结点下的子节点的名字为”TIME”,简单来说这个source包含了动画的一系列类型为浮点型的时间信息。

下属性”semantic”为\的子结点所引用的结点,其子结点下的子结点下的子节点的名字为” TRANSFORM”。这说明了这个source所包含的一系列浮点型的值为X坐标变换,这些变换的值与上面读取的时间相对应。(为什么是X坐标的变换呢,因为中指明了是关于X轴的变换,它所属的一系列数据自然也是同样的意义了)


Collada 快速入门 - 图文.doc 将本文的Word文档下载到电脑
搜索更多关于: Collada 快速入门 - 图文 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219