OSG dae插件的编译

1.下载COLLADA DOM,并解压缩到D:根目录下,当然你可以根据自己情况放置。
下载地址: http://sourceforge.net/projects/collada-dom/files/
以及两个相关网站:
http://www.khronos.org/collada/,
https://collada.org/mediawiki/index.php/COLLADA_-_Digital_Asset_and_FX_Exchange_Schema
2.编译COLLADA DOM:
  • 打开 projects文件夹下的VC9-1.4,下的dom解决方案(当然你可以根据自己情况选择VC8或是dom1.5版本)
  • build dom工程,建立动态库:DLL DOM 或是静态库: dom-static ,结果保存在 build文件夹下;
  • 这样就得到了我们所需的库文件;libcollada14dom21系列文件。。。。
3.CMake设置:
  • 在CMmake里设置COLLADA相关设置,如图:
   图1
  • Configure, Generate。。。
4.编译OSG2.8.2自带的dae plugin:
  • 打开OSG解决方案文件,Build Solution,dae plugin 编译完成,你可能同时需要Debug和Release版本; 
5.编译支持profile_GLSL的dae plugin以及osgviewer,因为用的源码是AMD公司的RenderMonkey软件提供的源码编译,因为这源码使用的DOM是老版本,所以采用DOM2.2,编译过程中就是要解决不匹配的问题,耐心点就可以了,具体步骤如下:
  • 第一次编译错误解决:Plugins dae - 44 error(s), 774 warning(s)

    :发现daeReader.h,daeRProfile_GLSL.cpp,daeRMaterials.cpp这两个错误出现的比较多:error C2039: 'getFilepath' : is not a member of 'daeURI',error C2039: 'getFile' : is not a member of 'daeURI'    

    :解决办法:查看daeURI.h,'getFilepath','getFile'已不是daeURI成员函数,经过分析发现'pathDir','pathFile'是与这两个函数的替代函数,做相应的替换,修改前后如下
修改前: 修改后:
    if ( uri.getFilepath() != NULL )
         {
            bufSize += strlen( uri.getFilepath() );
         }
         if ( uri.getFile() != NULL )
         {
            bufSize += strlen( uri.getFile() );
         }
    if ( !uri.pathDir().empty() )
         {
    bufSize += uri.pathDir().length();
         }
   if ( !uri.pathFile().empty() )
         {
    bufSize += uri.pathFile().length();
         }
    :daeRGeometry.cpp下的error C2039: '_Meta' : is not a member of 'domP',具体是domPRef p = (domP*)(daeElement*)domP::_Meta->create(); 这行有问题;
    :解决办法:查看OSG自带的daeRGeometry.cpp,发现注释掉了这行,下面给出了替代行
修改前: 修改后:
domPRef p = (domP*)(daeElement*)domP::_Meta->create(); domPRef p = (domP*)domP::registerElement(*dae)->create().cast();
  • 第二次编译错误解决:Plugins dae - 44 error(s), 754 warning(s)
   :提示daeWriter.cpp:error C2512: 'daeURI' : no appropriate default constructor available
   :解决办法:查看了daeWriter.h文件夹下的成员变量daeURI rootName;可能就是这里有问题,与OSG自带的daeWriter.cpp比对,发现成员初始化表里少了很多东西,我只在相应的错误提示出加了 rootName(*dae_);
   :提示daeRProfile_GLSL.cpp(1740) : error C2039: 'getInit_from_array' : is not a member of 'domFx_surface_common'
   :解决办法:查看了domFx_surface_common.h,发现'getInit_from_array' 也已经不复存在了,google搜索了下:找到 https://collada.org/mediawiki/index.php/DOM_backward_compatibility  DOM API 的变化信息。只因为COLLADA那个网站是在做的不好,之前没找到。。。里面提示信息如下:
源代码: 应修改为:
domFx_surface_init_from_common_Array& initFromArray = surface->getInit_from_array();
 
domFx_surface_init_from_common_Array& initFromArray = surface->getFx_surface_init_common()->getInit_from_array();
 
所以我就照着做了。。。。将所有的getInit_from_array()以getFx_surface_init_common()->getInit_from_array()替代。
    :发现刚才修改的代码又出现错误了daeRGeometry.cpp(382) : error C2065: 'dae' : undeclared identifier
    :解决办法:查看 daeReader.h, 里面有成员变量DAE   *  m_pDae;我想就把'dae'替换为'm_pDae';
  •   第三次编译错误解决:Plugins dae - 36 error(s), 254 warning(s)
    :还是刚才'getInit_from_array' 的错误,修改办法同上;遗留问题。。。
  • 再次编译,连接通过、、、、

你可能感兴趣的:(schema,null,Build,Exchange,plugins,Constructor)