OSG读取模型插件的单独使用.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OSG 中读取模型插件的单独使用 模型插件单独使用的原因 因为我的任务的需求,我需要把诸如 3ds,flt 等多种格式的模型添加到数据 库里,这个时候我需要在把模型添加到数据库的时候,自动的把模型的纹理也拷 贝或者移动到相对应的磁盘目录中去。这个时候就必须要获取模型的纹理文件列 表,读取模型的内部信息。而 OSG 的插件机制只是返回 Node 节点,或者 ReadWriter 类,缺少更为精细的模型信息。所以我就借助 OSG 的 3DS,FLT 的模 型插件源码,对这两个插件进行了扩展,获取源码中的纹理路径名,并导出具体 的 DLL 类,重新得到 Node 节点,和原有的 OSG 程序进行了融合。这里写下我的 方法和走的一些弯路,希望能给有这方面的需求的朋友一点经验,。也希望能为 OSG 社区做一点小小的贡献。我的水平不高,对 osg 的理解和使用也很简单,请 大家见谅! 插件的单独使用方法: 测试环境的搭建 我先使用 CMake 配置了 osg 的源程序,然后打开工程,如图一 图一 OSG 源程序 把 Plugins 3ds 目录下的文件都拷贝到了 Examples Huds 里面,这样做的原因有 两个 第一:因为我自己不知道模型文件里面的纹理列表在哪里,需要进行多次尝 试和验证,而 Plugins 3ds 生成的是 dll,不方便测试。需要在一个 exe 程序进 行测试。生成的容器的测试环境不如 Examples 方便。 第二:如果自己新建一个工程,在拷贝 Plugins 3ds 文件的,因为 Plugins 3ds 里工程里有依赖原始的 OSG 源码,新的工程里依赖的却是别人编译好的 OSG dll,这样程序非常容易失败,我开始的时候就这么做的,可是总在创建纹理函数 时抛异常。因为上面两点原因,所以我就把文件放到了 Examples Huds,需要注 意的是:别忘了修改“Example”链接的 lib 文件,因为有可能插件库里的链接 的 lib 和 Example Huds 不一样,这样测试环境就配置好了。 具体的插件的修改 我在 Examples Huds 里,添加了:ReaderWriter3DS.h 头文件,用于后来的 导出类使用。把 ReaderWriter3DS 作为导出类,就是像这样加上: #ifdef DLL_API #else #define DLL_API _declspec(dllimport) #endif #pragma once class DLL_API ReaderWriter3DS : public osgDB::ReaderWriter 这种修饰符。 同时我修改了: virtual ReadResult readNode(const std::string file, const osgDB::ReaderWriter::Options* options) ; const 函数, 因为 const函数里不能对类成员作修改,而我想把 Lib3dsFile *f; 作为 ReaderWriter3DS的成员变量,所以就把这个函数的声明给就改了。3DS的模型格 式比较简单,我很快找到了模型文件的列表,在 osgDB::ReaderWriter::ReadResult ReaderWriter3DS::readNode(const std::string file, const osgDB::ReaderWriter::Options* options) 函数里添加了获取纹理列表的方法。这样获取模型的纹理列表。 for (Lib3dsMaterial *mat=f-materials; ma

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档