查看: 8441|回复: 32

求教:模型动画的问题

[复制链接]

该用户从未签到

发表于 2010-8-18 20:35:34 | 显示全部楼层 |阅读模式
请教诸位,我想用OSG做个demo,实现载入人物模型,控制人物运动,如走,跑,等一些基本的动作,请问如何实现?实现的思想是什么?
我在教程里看骨骼动画那部分,但还是不太清楚;请问如何获取模型中的那些关节信息,来由OSG操纵呢?又该用什么模型呢?
请教~~~

该用户从未签到

发表于 2010-8-19 08:06:54 | 显示全部楼层
可以使用fbx或dae格式导入骨骼模型并用osgAnimation进行控制

该用户从未签到

 楼主| 发表于 2010-9-6 22:58:28 | 显示全部楼层
2# array 请教array大哥:
1.  osg不支持fbx文件,请问如何导入骨骼模型?如何用osgAnimation控制?
2. dae文件,需要collada库支持,下不到这个库,osg也没装这个插件?请问论坛有资源吗?
3.  导入骨骼模型?是导入到哪儿?如何由osgAnimation控制?可否再详细点讲解

麻烦了!!!求教求教

该用户从未签到

发表于 2010-9-7 09:13:47 | 显示全部楼层
1. OSG已经提供了对于dae和fbx的骨骼导入支持
2、collada是国际通用的数据格式,在它的官方网站上下载源码并编译collada-dom即可
3、导入为osgAnimation的Bone树结构

该用户从未签到

 楼主| 发表于 2010-9-7 15:04:33 | 显示全部楼层
1. OSG已经提供了对于dae和fbx的骨骼导入支持
3、导入为osgAnimation的Bone树结构
array 发表于 2010-9-7 09:13


请教array:
我用的是VS2005SP1+osg2.8,我看你和肖鹏的书,都没有提到这个fbx,(dae是可以的,已经下到库),有关于这个fbx 的最新资料文档或者源码吗?
还有,你这个导入的意思是说,读取骨骼模型中的骨骼信息,然后自己构造这个bone树,对吧?我以为是osg提供函数或者类来直接实现从fbx文件读取直接生成一个bone树

该用户从未签到

发表于 2010-9-7 16:50:02 | 显示全部楼层
Autodesk FBX SDk,下载这个之后就可以编译osgdb_fbx插件了。我们写书的时候这个插件还没有出现;换句话说您的2.8中也不会有这个插件存在

我以为是osg提供函数或者类来直接实现从fbx文件读取直接生成一个bone树
就是这样,否则要插件做什么

该用户从未签到

 楼主| 发表于 2010-9-7 20:32:16 | 显示全部楼层
6# array
那我现在下好SDK编译好,重新编译OSG,设定好路径的话,就可以添加上这个插件了吧?不需要把我的那个OSG版本更新吧?那有没有最新的关于osgfbx的例子和源码可以学习啊?

该用户从未签到

发表于 2010-9-8 08:27:22 | 显示全部楼层
您必须更新到2.9.8或者以后的OSG版本才可以使用osgdb_fbx插件,没有什么例子,只要readNodeFile("xxx.fbx")就可以了。如果包含骨骼动画信息,那么它会自动被加载到节点树中

该用户从未签到

 楼主| 发表于 2010-9-8 09:24:33 | 显示全部楼层
8# array thank you~~~多谢

该用户从未签到

 楼主| 发表于 2010-9-21 22:32:55 | 显示全部楼层
8# array 我编译成功了osgPlugins fbx,在命令行窗口下用osgviewerd查看fbx文件能显示,命令行窗口信息如下:
C:\Documents and Settings\Administrator>osgviewerd character.FBX
LinkVisitor links 5 for "Bip01"
LinkVisitor links 5 for "rootJoint"
LinkVisitor links 5 for "Bip01 Spine"
LinkVisitor links 5 for "Bip01 Spine1"
LinkVisitor links 5 for "Bip01 Spine2"
LinkVisitor links 5 for "Bip01 Spine3"
LinkVisitor links 5 for "Bip01 Neck"
LinkVisitor links 5 for "Bip01 L Clavicle"
LinkVisitor links 5 for "Bip01 L UpperArm"
LinkVisitor links 5 for "Bip01 L Forearm"
LinkVisitor links 5 for "Bip01 L Hand"
LinkVisitor links 5 for "Bip01 L Finger0"
LinkVisitor links 5 for "Bip01 L Finger0Nub"
LinkVisitor links 5 for "Bip01 R Clavicle"
LinkVisitor links 5 for "Bip01 R UpperArm"
LinkVisitor links 5 for "Bip01 R Forearm"
LinkVisitor links 5 for "Bip01 R Hand"
LinkVisitor links 5 for "Bip01 R Finger0"
LinkVisitor links 5 for "Bip01 R Finger0Nub"
LinkVisitor links 5 for "Bip01 Head"
LinkVisitor links 5 for "Bip01 HeadNub"
LinkVisitor links 5 for "Bip01 L Thigh"
LinkVisitor links 5 for "Bip01 L Calf"
LinkVisitor links 5 for "Bip01 L Foot"
LinkVisitor links 5 for "Bip01 L Toe0"
LinkVisitor links 5 for "Bip01 L Toe01"
LinkVisitor links 5 for "Bip01 L Toe02"
LinkVisitor links 5 for "Bip01 L Toe0Nub"
LinkVisitor links 5 for "Bip01 R Thigh"
LinkVisitor links 5 for "Bip01 R Calf"
LinkVisitor links 5 for "Bip01 R Foot"
LinkVisitor links 5 for "Bip01 R Toe0"
LinkVisitor links 5 for "Bip01 R Toe01"
LinkVisitor links 5 for "Bip01 R Toe02"
LinkVisitor links 5 for "Bip01 R Toe0Nub"
LinkVisitor links 5 for "Bip01 Footsteps"
uniq groups 31 for
uniq groups 1 for
uniq groups 667 for
uniq groups 890 for
uniq groups 652 for
uniq groups 820 for
uniq groups 609 for


但是在程序中用如下:
osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("character.FBX");
运行后命令行窗口提示:
Unexpected file type.Corrupted or invalid file.

请问这是为什么

该用户从未签到

发表于 2010-9-25 08:33:26 | 显示全部楼层
这似乎是因为您的fbx文件无法被FBX SDK所识别引起的?这并不是OSG的错误提示

该用户从未签到

 楼主| 发表于 2010-9-25 14:34:29 | 显示全部楼层
11# array 用代码 readNodeFile(***.fbx) 是不可读取的;
但是用osgviewerd ***.fbx 却是可以显示的;
请问这是为什么啊?

该用户从未签到

发表于 2010-9-25 16:01:10 | 显示全部楼层
那就是你编译的插件版本不对喽,再编译个release的版本

该用户从未签到

 楼主| 发表于 2010-9-25 21:43:47 | 显示全部楼层
13# tianxiao888 请问您的意思是,只把osg plugin fbx 这个项目重新编译为release版本 还是将整个osg解决方案重新编译为release版本。我这个fbx库是直接从Autodesk网站上下的static的exe安装文件,安装完在fbx/lib/目录下有***.lib和***d.lib两个版本的,用CMake向OSG中添加fbx的时候 如下图:
就是这样,诚心候教~~~
1.png

该用户从未签到

发表于 2010-9-26 08:35:10 | 显示全部楼层
11# array 用代码 readNodeFile(***.fbx) 是不可读取的;
但是用osgviewerd ***.fbx 却是可以显示的;
请问这是为什么啊?
jackaduma 发表于 2010-9-25 14:34


您是否确信问题就是出在您的readNodeFile这一行?还是您的其他代码影响了您的判断?我从没有见到过osgviewer可读而自己的readNodeFile不可读的情况

该用户从未签到

 楼主| 发表于 2010-9-26 08:39:25 | 显示全部楼层
15# array 确信,因为总共就几行,就是读这个模型啊,而且我换*.osg的文件测试过,代码不会错的。而且是osgviewerd 读取的,我想是不是debug版本和release版本的问题呢?正如tianxiao888所说的,虽然我不太明白

该用户从未签到

 楼主| 发表于 2010-9-26 10:32:56 | 显示全部楼层
13# tianxiao888

该用户从未签到

发表于 2010-9-26 11:35:20 | 显示全部楼层
看你cmake设置的对啊,两个版本的库都关联了。你用osgviewer xxx 能行么

该用户从未签到

发表于 2010-9-26 12:23:07 | 显示全部楼层
15# array 确信,因为总共就几行,就是读这个模型啊,而且我换*.osg的文件测试过,代码不会错的。而且是osgviewerd 读取的,我想是不是debug版本和release版本的问题呢?正如tianxiao888所说的,虽然我不太明白
jackaduma 发表于 2010-9-26 08:39


这样说的话,您执行readNodeFile的这个程序不是debug版本的?那么您可以用下面两种方法测试:
1、用osgviewer xxx.fbx是否可行
2、用Debug版本的您的程序测试是否可行

该用户从未签到

 楼主| 发表于 2010-9-26 15:26:32 | 显示全部楼层
18# tianxiao888 能行啊,读取节点信息正如上面的所述;
这才困惑啊

该用户从未签到

 楼主| 发表于 2010-9-26 15:31:32 | 显示全部楼层
19# array 我 执行readNodeFile的这个程序 是debug版本的啊;
osgviewer xxx.fbx是可行的;
程序本身代码是无错的;

现在有点乱了,搞不清楚,不太明白您的意思??

该用户从未签到

发表于 2010-9-26 17:01:33 | 显示全部楼层
19# array 我 执行readNodeFile的这个程序 是debug版本的啊;
osgviewer xxx.fbx是可行的;
程序本身代码是无错的;

现在有点乱了,搞不清楚,不太明白您的意思??
jackaduma 发表于 2010-9-26 15:31


既然这样的话,就必然是您自己的代码在哪里产生了问题,您不能简单地用一句话说自己是无错的,要证明这一点,请给出您用于测试的代码,或者把示例文件也提供出来供大家测试

该用户从未签到

 楼主| 发表于 2010-9-28 12:06:38 | 显示全部楼层
本帖最后由 jackaduma 于 2010-9-28 12:12 编辑

22# array 这就是全部代码,仅仅为了测试读取
  1. #include <osgViewer/Viewer>

  2. #include <osg/Group>
  3. #include <osg/Geode>
  4. #include <osg/Node>

  5. #include <osgDB/ReadFile>
  6. #include <osgDB/WriteFile>

  7. int main()
  8. {
  9.         osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();

  10.         osg::ref_ptr<osg::Group> root = new osg::Group();

  11.         osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("043.fbx");

  12.         root->addChild(node.get());


  13.         viewer->setSceneData(root.get());

  14.         viewer->realize();

  15.         viewer->run();

  16.         return 0;
  17. }
复制代码

附件为模型,包括我自己测试的character.fbx和2楼给的043.fbx,我测试的结果就是
我编译的OSG(2.9.9版源码编译的debug版本)的osgviewerd.exe是可以读取出来的,而我自己的程序是读不出来的

模型.rar

2.33 MB, 下载次数: 269, 下载积分: 威望 1

该用户从未签到

发表于 2010-9-28 12:23:42 | 显示全部楼层
您的程序和模型在我这里执行无误,可以看到一个不错的人体模型~~

该用户从未签到

发表于 2010-10-1 19:31:25 | 显示全部楼层
大家是不是把问题搞复杂了 楼主没设DATAPATH把模型路径换成英文绝对路径试试

该用户从未签到

发表于 2010-10-6 23:19:34 | 显示全部楼层
可以使用fbx或dae格式导入骨骼模型并用osgAnimation进行控制
array 发表于 2010-8-19 08:06

请教各位:之前在openGL下用cal3d做骨骼动画,请问在osg系统下:应该用osgcal还是osgAnimation?谢谢

该用户从未签到

发表于 2010-10-7 10:56:28 | 显示全部楼层
如果您打算依然使用cal3d,那么请选择osgcal2

该用户从未签到

发表于 2010-10-8 20:14:39 | 显示全部楼层
如果您打算依然使用cal3d,那么请选择osgcal2
array 发表于 2010-10-7 10:56

谢谢array。痛下决心,决定采用fbx与osgAnimation结合。
注意到,array每次回复,均采用“您”而不是“你”,值得尊敬。谢谢您

该用户从未签到

 楼主| 发表于 2010-10-9 08:50:32 | 显示全部楼层
24# array
程序无错,模型无错,路径也设置了,这是为什么啊?求教,您能指出一些猜测或方向吗?多谢

该用户从未签到

发表于 2010-10-9 10:18:57 | 显示全部楼层
本帖最后由 caoyishi 于 2010-10-9 10:39 编辑
24# array
程序无错,模型无错,路径也设置了,这是为什么啊?求教,您能指出一些猜测或方向吗?多谢
jackaduma 发表于 2010-10-9 08:50

osg新人猜测一下,错了别怪我,猜对的话,把您解决的结果告诉大家,谢谢。
(1)fbxsdk版本:您用的是最新版2011.3.1,但我看osg2.9.9的fbx插件,采用的2011.2版,这个会不会影响?
(2)debug版:我的debug版总是出问题
(3)加载fbx模型:osgAnimationViewer例子加载模型的代码为
  1. osg::Group* node = dynamic_cast<osg::Group*>(osgDB::readNodeFiles(arguments));
复制代码
,不知道这与一般的加载方法的区别?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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