查看: 2457|回复: 6

使用osgCal2调用人物动画的一点经验

[复制链接]

该用户从未签到

发表于 2009-12-23 12:21:04 | 显示全部楼层 |阅读模式
最近工作中需要在osg系统中使用一点骨骼动画的功能,简单了解了一下osgAnimation和osgCal2,由于osgAnimation目前还不能从max导出,所以最终还是选择了osgCal2(虽然它已经很久不更新了,而cal3d的max导出插件只支持max8,也只能暂时将就用了)。在经历了种种失败后,终于在osgCalViewer中成功看到了期待的人物动画,下面把从网上找到的相关资料和自己的一点经验贴出来,希望可以帮到有同样需要的人


虽然Cal3D用的也算是挺多的,但是很奇怪的是这个项目已经有两三年没有更新了。同时官方文档的描述也很简单,唯一一个官方的教程居然绝大部分篇幅是将如何在3ds max中制作骨骼动画,关键部分如何使用Cal3D插件只有简单的两段话。对于第一次使用Cal3D的人来说肯定会被它搞得一头雾水,而且各个步骤中有一个地方错了都会导致最终的骨骼动画不正确。这里把我试验正确的d导出步骤贴出来:
  • 导出骨骼
    a. 选择骨骼根节点bip01
    b. 打开Figure Mode
    c. File->Export Cal3D Skeleton
    d. 选择所有骨骼,通常默认即可
  • 导出材质
    a. 所有纹理必须使用tga格式
    b. 选择骨骼根节点bip01
    c. 打开Figure Mode
    d. 打开材质球,将所有材质命名为material[0], material[1]这样的名称
    e. File->Export->Cal3d Materials
    f. 选择导出的材质(每一种材质分别需要导出一次)
  • 导出模型
    a. 打开Figure Mode
    b. 选择需要被导出的模型
    c. File->Export Cal3d Mesh
  • 导出动作
    a. 关闭Figure Mode
    b. File->Export Cal3D Animation
    c. 选择之前导出的谷歌文件
    d. 选择骨骼,默认即可
    e. 选择导出动作的起始结束帧号,帧速和displacement(不知道有什么用?)
  • 创建xxx.cfg文件,格式如下:
      scale=1.0
      skeleton=skeleton.csf
      animation=walk.caf
      mesh=worker.cmf
      material=mat1.crf
注意事项:
  • Cal3D的导出插件只能支持3ds max 8。如果你是用的9或者更高版本,虽然你已经看了不少内容但是你也只能放弃了:(
  • 导出时必须严格按照上面所说的顺序依次导出骨骼、材质、模型和动作
  • 最后创建的.cfg文件中等号左右不要留空格,否则在某些解析程序中(比如说OsgCal中)会导致错误。这应该算是OsgCal的一个小bug。另外OsgCal要求配置文件中scale, skeleton等的顺序不能变,否则也会出错。
补充一点:
我用的osgCal2,加载cal3d提供的一些示例模型时没有问题,但加载自己从max导出的模型失败,提示找不到插件,而且插件名为osgdb_.dll(可以推断是程序中试图加载无扩展名的文件所致),DEBUG发现是osgCal::Material类的构造函数中有点问题,修改如下,红色的是增加的代码。
          if ( prefix == "DiffuseMap:" || prefix == "" )
          {
                if (suffix == "<none>")
                     continue;

                diffuseMap = concatPaths( dir, suffix );
          }

该用户从未签到

发表于 2009-12-23 13:20:37 | 显示全部楼层
感谢楼主的热心,有些遗憾的是,osgCal已经确认停止更新;未来我们会看到osgAnimation逐步替代它的功能。
我个人曾经想把Cal3D的支持作为插件移植到osgAnimation上去,但是由于Cal3D自己对渲染进行了严格的封装,因此这一工作目前很难实现,也许未来会有机会让osgCal作为OSG的一部分重生吧

该用户从未签到

发表于 2009-12-23 14:48:12 | 显示全部楼层
支持~~

该用户从未签到

发表于 2010-1-29 02:13:49 | 显示全部楼层
支持楼主,不过我连CAL3D自己的模型都不能正常导入啊,他说我少什么插件,tga格式的,不知楼主遇到过没有啊?

该用户从未签到

发表于 2010-1-29 08:09:56 | 显示全部楼层
那就是您缺少tga格式的插件,osgdb_tga,您可以检查一下这个插件是否编译并置于系统可以识别的目录中

该用户从未签到

发表于 2010-1-29 12:27:29 | 显示全部楼层
我把插件目录放进去了,除了骷髅的那个模型,其他的自带的模型也打不开啊,是不是库的版本不对啊

该用户从未签到

发表于 2010-11-2 10:50:13 | 显示全部楼层
最近工作中需要在osg系统中使用一点骨骼动画的功能,简单了解了一下osgAnimation和osgCal2,由于osgAnimation目前还不能从max导出,所以最终还是选择了osgCal2(虽然它已经很久不更新了,而cal3d的max导出插件只支持 ...
indif 发表于 2009-12-23 12:21

楼主 您好 非常感谢您的教程
我最近一直在调试osgCalViewer,老是失败,问题就出在coreModel->load(fn,p.get());这句话上,出现如下图所示的提示 osgcal2.jpg ,load函数也无法跟进去,一开始用的动态库,后来请教了一下,改成全部使用静态库,结果还是出现这个问题,好几天还没搞定,非常郁闷
还望您能指点一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表