osg除了自己利用osgAnimation里的函数设计动画之外,也可以加载一些包含动画的3D模型文件,如fbx,md2等。

md2文件是用osg::Sequence实现的关键帧动画,每一帧都需要单独绘制几何模型。fbx格式是骨骼动画,为模型的不同部位赋予随时间变化的变换矩阵,是比较推荐的动画格式。值得注意的是osg还支持微软的x文件的读取,但阅读插件代码发现他只是简单的读取了模型,并没有实现动画的读取。

插件编译

osg里要加载其他格式的文件,基本都是需要对应的插件,在osgPlugin里可以看到对应的dll。在我们编译osg源码的时候由于没有配置对应的依赖库,往往会漏掉一些插件的编译,等到用时,重新编译整个osg显然是十分不合理的,实际上按需编译出对应的dll就已经足够了。这里的编译方法适用于所有的osg插件

在VS中新建一个空项目,将源码中对应插件的代码copy过来,譬如fbx插件代码目录是src\osgPlugins\fbx,将这个目录里的头文件,源文件添加到你新建的项目里来(建议先拷贝到项目目录再添加现有项),然后设置项目属性编译生成就好了。

fbx android加载 sdk fbx文件读取_OSG

首先将生成的目标文件名改为对应的插件名字(Debug模式加d),然后把配置类型改为dll。注意平台工具集要与你编译osg时用的匹配。然后在C++预处理器中定义这两个宏FBXSDK_SHARED;WIN32。

fbx android加载 sdk fbx文件读取_c++_02

之后就是常规操作了,设置附加包含目录,附加依赖库,附加依赖项,配置osg的环境,如果是像fbx这样复杂的插件还要配置fbx sdk的环境,当然前提是你要安装sdk,下载地址。麻烦的一点就是你要注意osg版本,vs版本,fbx sdk版本的一致性,这里我说一下我编译成功的版本osg3.3.1,vs2010,fbxsdk2014.2.1;

不同的osg版本,插件可能略有变化,可在ReaderWriterFBX.h中查看对应fbx版本,如下图

fbx android加载 sdk fbx文件读取_c++_03

编译生成一个dll就完成了插件编译。另外这样在VS编译生成的插件有一个优点:便于调试。你可以在你编译的插件里设置断点,即使是编译osg时就已经有的插件,你也可以用这个方法进行调试(把已有的删掉,或者改个名,让程序先找到你生成的dll),我就用这个方法解决了多次插件报错的问题。